﻿using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using Newtonsoft.Json;

namespace EzPinyin.Spider
{
	/// <summary>
	/// 提供应用程序全局的杂项功能。
	/// </summary>
	internal static class App
	{
		#region 常用字
		/// <summary>
		/// 常用字
		/// </summary>
		public const string COMMON_CHARACTERS = "一乙二十丁厂七卜人入八九几儿了力乃刀又三于干亏士工土才寸下大丈与万上小口巾山千乞川亿个勺久凡及夕丸么广亡门义之尸弓己已子卫也女飞刃习叉马乡丰王井开夫天无元专云扎艺木五支厅不太犬区历尤友匹车巨牙屯比互切瓦止少日中冈贝内水见午牛手毛气升长仁什片仆化仇币仍仅斤爪反介父从今凶分乏公仓月氏勿欠风丹匀乌凤勾文六方火为斗忆订计户认心尺引丑巴孔队办以允予劝双书幻玉刊示末未击打巧正扑扒功扔去甘世古节本术可丙左厉右石布龙平灭轧东卡北占业旧帅归且旦目叶甲申叮电号田由史只央兄叼叫另叨叹四生失禾丘付仗代仙们仪白仔他斥瓜乎丛令用甩印乐句匆册犯外处冬鸟务包饥主市立闪兰半汁汇头汉宁穴它讨写让礼训必议讯记永司尼民出辽奶奴加召皮边发孕圣对台矛纠母幼丝式刑动扛寺吉扣考托老执巩圾扩扫地扬场耳共芒亚芝朽朴机权过臣再协西压厌在有百存而页匠夸夺灰达列死成夹轨邪划迈毕至此贞师尘尖劣光当早吐吓虫曲团同吊吃因吸吗屿帆岁回岂刚则肉网年朱先丢舌竹迁乔伟传乒乓休伍伏优伐延件任伤价份华仰仿伙伪自血向似后行舟全会杀合兆企众爷伞创肌朵杂危旬旨负各名多争色壮冲冰庄庆亦刘齐交次衣产决充妄闭问闯羊并关米灯州汗污江池汤忙兴宇守宅字安讲军许论农讽设访寻那迅尽导异孙阵阳收阶阴防奸如妇好她妈戏羽观欢买红纤级约纪驰巡寿弄麦形进戒吞远违运扶抚坛技坏扰拒找批扯址走抄坝贡攻赤折抓扮抢孝均抛投坟抗坑坊抖护壳志扭块声把报却劫芽花芹芬苍芳严芦劳克苏杆杠杜材村杏极李杨求更束豆两丽医辰励否还歼来连步坚旱盯呈时吴助县里呆园旷围呀吨足邮男困吵串员听吩吹呜吧吼别岗帐财针钉告我乱利秃秀私每兵估体何但伸作伯伶佣低你住位伴身皂佛近彻役返余希坐谷妥含邻岔肝肚肠龟免狂犹角删条卵岛迎饭饮系言冻状亩况床库疗应冷这序辛弃冶忘闲间闷判灶灿弟汪沙汽沃泛沟没沈沉怀忧快完宋宏牢究穷灾良证启评补初社识诉诊词译君灵即层尿尾迟局改张忌际陆阿陈阻附妙妖妨努忍劲鸡驱纯纱纳纲驳纵纷纸纹纺驴纽奉玩环武青责现表规抹拢拔拣担坦押抽拐拖拍者顶拆拥抵拘势抱垃拉拦拌幸招坡披拨择抬其取苦若茂苹苗英范直茄茎茅林枝杯柜析板松枪构杰述枕丧或画卧事刺枣雨卖矿码厕奔奇奋态欧垄妻轰顷转斩轮软到非叔肯齿些虎虏肾贤尚旺具果味昆国昌畅明易昂典固忠咐呼鸣咏呢岸岩帖罗帜岭凯败贩购图钓制知垂牧物乖刮秆和季委佳侍供使例版侄侦侧凭侨佩货依的迫质欣征往爬彼径所舍金命斧爸采受乳贪念贫肤肺肢肿胀朋股肥服胁周昏鱼兔狐忽狗备饰饱饲变京享店夜庙府底剂郊废净盲放刻育闸闹郑券卷单炒炊炕炎炉沫浅法泄河沾泪油泊沿泡注泻泳泥沸波泼泽治怖性怕怜怪学宝宗定宜审宙官空帘实试郎诗肩房诚衬衫视话诞询该详建肃录隶居届刷屈弦承孟孤陕降限妹姑姐姓始驾参艰线练组细驶织终驻驼绍经贯奏春帮珍玻毒型挂封持项垮挎城挠政赴赵挡挺括拴拾挑指垫挣挤拼挖按挥挪某甚革荐巷带草茧茶荒茫荡荣故胡南药标枯柄栋相查柏柳柱柿栏树要咸威歪研砖厘厚砌砍面耐耍牵残殃轻鸦皆背战点临览竖省削尝是盼眨哄显哑冒映星昨畏趴胃贵界虹虾蚁思蚂虽品咽骂哗咱响哈咬咳哪炭峡罚贱贴骨钞钟钢钥钩卸缸拜看矩怎牲选适秒香种秋科重复竿段便俩贷顺修保促侮俭俗俘信皇泉鬼侵追俊盾待律很须叙剑逃食盆胆胜胞胖脉勉狭狮独狡狱狠贸怨急饶蚀饺饼弯将奖哀亭亮度迹庭疮疯疫疤姿亲音帝施闻阀阁差养美姜叛送类迷前首逆总炼炸炮烂剃洁洪洒浇浊洞测洗活派洽染济洋洲浑浓津恒恢恰恼恨举觉宣室宫宪突穿窃客冠语扁袄祖神祝误诱说诵垦退既屋昼费陡眉孩除险院娃姥姨姻娇怒架贺盈勇怠柔垒绑绒结绕骄绘给络骆绝绞统耕耗艳泰珠班素蚕顽盏匪捞栽捕振载赶起盐捎捏埋捉捆捐损都哲逝捡换挽热恐壶挨耻耽恭莲莫荷获晋恶真框桂档桐株桥桃格校核样根索哥速逗栗配翅辱唇夏础破原套逐烈殊顾轿较顿毙致柴桌虑监紧党晒眠晓鸭晃晌晕蚊哨哭恩唤啊唉罢峰圆贼贿钱钳钻铁铃铅缺氧特牺造乘敌秤租积秧秩称秘透笔笑笋债借值倚倾倒倘俱倡候俯倍倦健臭射躬息徒徐舰舱般航途拿爹爱颂翁脆脂胸胳脏胶脑狸狼逢留皱饿恋桨浆衰高席准座脊症病疾疼疲效离唐资凉站剖竞部旁旅畜阅羞瓶拳粉料益兼烤烘烦烧烛烟递涛浙涝酒涉消浩海涂浴浮流润浪浸涨烫涌悟悄悔悦害宽家宵宴宾窄容宰案请朗诸读扇袜袖袍被祥课谁调冤谅谈谊剥恳展剧屑弱陵陶陷陪娱娘通能难预桑绢绣验继球理捧堵描域掩捷排掉堆推掀授教掏掠培接控探据掘职基著勒黄萌萝菌菜萄菊萍菠营械梦梢梅检梳梯桶救副票戚爽聋袭盛雪辅辆虚雀堂常匙晨睁眯眼悬野啦晚啄距跃略蛇累唱患唯崖崭崇圈铜铲银甜梨犁移笨笼笛符第敏做袋悠偿偶偷您售停偏假得衔盘船斜盒鸽悉欲彩领脚脖脸脱象够猜猪猎猫猛馅馆凑减毫麻痒痕廊康庸鹿盗章竟商族旋望率着盖粘粗粒断剪兽清添淋淹渠渐混渔淘液淡深婆梁渗情惜惭悼惧惕惊惨惯寇寄宿窑密谋谎祸谜逮敢屠弹随蛋隆隐婚婶颈绩绪续骑绳维绵绸绿琴斑替款堪搭塔越趁趋超提堤博揭喜插揪搜煮援裁搁搂搅握揉斯期欺联散惹葬葛董葡敬葱落朝辜葵棒棋植森椅椒棵棍棉棚棕惠惑逼厨厦硬确雁殖裂雄暂雅辈悲紫辉敞赏掌晴暑最量喷晶喇遇喊景践跌跑遗蛙蛛蜓喝喂喘喉幅帽赌赔黑铸铺链销锁锄锅锈锋锐短智毯鹅剩稍程稀税筐等筑策筛筒答筋筝傲傅牌堡集焦傍储奥街惩御循艇舒番释禽腊脾腔鲁猾猴然馋装蛮就痛童阔善羡普粪尊道曾焰港湖渣湿温渴滑湾渡游滋溉愤慌惰愧愉慨割寒富窜窝窗遍裕裤裙谢谣谦属屡强粥疏隔隙絮嫂登缎缓编骗缘瑞魂肆摄摸填搏塌鼓摆携搬摇搞塘摊蒜勤鹊蓝墓幕蓬蓄蒙蒸献禁楚想槐榆楼概赖酬感碍碑碎碰碗碌雷零雾雹输督龄鉴睛睡睬鄙愚暖盟歇暗照跨跳跪路跟遣蛾蜂嗓置罪罩错锡锣锤锦键锯矮辞稠愁筹签简毁舅鼠催傻像躲微愈遥腰腥腹腾腿触解酱痰廉新韵意粮数煎塑慈煤煌满漠源滤滥滔溪溜滚滨粱滩慎誉塞谨福群殿辟障嫌嫁叠缝缠静碧璃墙撇嘉摧截誓境摘摔聚蔽慕暮蔑模榴榜榨歌遭酷酿酸磁愿需弊裳颗嗽蜻蜡蝇蜘赚锹锻舞稳算箩管僚鼻魄貌膜膊膀鲜疑馒裹敲豪膏遮腐瘦辣竭端旗精歉熄熔漆漂漫滴演漏慢寨赛察蜜谱嫩翠熊凳骡缩慧撕撒趣趟撑播撞撤增聪鞋蕉蔬横槽樱橡飘醋醉震霉瞒题暴瞎影踢踏踩踪蝶蝴嘱墨镇靠稻黎稿稼箱箭篇僵躺僻德艘膝膛熟摩颜毅糊遵潜潮懂额慰劈操燕薯薪薄颠橘整融醒餐嘴蹄器赠默镜赞篮邀衡膨雕磨凝辨辩糖糕燃澡激懒壁避缴戴擦鞠藏霜霞瞧蹈螺穗繁辫赢糟糠燥臂翼骤鞭覆蹦镰翻鹰警攀蹲颤瓣爆疆壤耀躁嚼嚷籍魔灌蠢霸露囊罐匕刁丐歹戈夭仑讥冗邓艾夯凸卢叭叽皿凹囚矢乍尔冯玄邦迂邢芋芍吏夷吁吕吆屹廷迄臼仲伦伊肋旭匈凫妆亥汛讳讶讹讼诀弛阱驮驯纫玖玛韧抠扼汞扳抡坎坞抑拟抒芙芜苇芥芯芭杖杉巫杈甫匣轩卤肖吱吠呕呐吟呛吻吭邑囤吮岖牡佑佃伺囱肛肘甸狈鸠彤灸刨庇吝庐闰兑灼沐沛汰沥沦汹沧沪忱诅诈罕屁坠妓姊妒纬玫卦坷坯拓坪坤拄拧拂拙拇拗茉昔苛苫苟苞茁苔枉枢枚枫杭郁矾奈奄殴歧卓昙哎咕呵咙呻咒咆咖帕账贬贮氛秉岳侠侥侣侈卑刽刹肴觅忿瓮肮肪狞庞疟疙疚卒氓炬沽沮泣泞泌沼怔怯宠宛衩祈诡帚屉弧弥陋陌函姆虱叁绅驹绊绎契贰玷玲珊拭拷拱挟垢垛拯荆茸茬荚茵茴荞荠荤荧荔栈柑栅柠枷勃柬砂泵砚鸥轴韭虐昧盹咧昵昭盅勋哆咪哟幽钙钝钠钦钧钮毡氢秕俏俄俐侯徊衍胚胧胎狰饵峦奕咨飒闺闽籽娄烁炫洼柒涎洛恃恍恬恤宦诫诬祠诲屏屎逊陨姚娜蚤骇耘耙秦匿埂捂捍袁捌挫挚捣捅埃耿聂荸莽莱莉莹莺梆栖桦栓桅桩贾酌砸砰砾殉逞哮唠哺剔蚌蚜畔蚣蚪蚓哩圃鸯唁哼唆峭唧峻赂赃钾铆氨秫笆俺赁倔殷耸舀豺豹颁胯胰脐脓逛卿鸵鸳馁凌凄衷郭斋疹紊瓷羔烙浦涡涣涤涧涕涩悍悯窍诺诽袒谆祟恕娩骏琐麸琉琅措捺捶赦埠捻掐掂掖掷掸掺勘聊娶菱菲萎菩萤乾萧萨菇彬梗梧梭曹酝酗厢硅硕奢盔匾颅彪眶晤曼晦冕啡畦趾啃蛆蚯蛉蛀唬啰唾啤啥啸崎逻崔崩婴赊铐铛铝铡铣铭矫秸秽笙笤偎傀躯兜衅徘徙舶舷舵敛翎脯逸凰猖祭烹庶庵痊阎阐眷焊焕鸿涯淑淌淮淆渊淫淳淤淀涮涵惦悴惋寂窒谍谐裆袱祷谒谓谚尉堕隅婉颇绰绷综绽缀巢琳琢琼揍堰揩揽揖彭揣搀搓壹搔葫募蒋蒂韩棱椰焚椎棺榔椭粟棘酣酥硝硫颊雳翘凿棠晰鼎喳遏晾畴跋跛蛔蜒蛤鹃喻啼喧嵌赋赎赐锉锌甥掰氮氯黍筏牍粤逾腌腋腕猩猬惫敦痘痢痪竣翔奠遂焙滞湘渤渺溃溅湃愕惶寓窖窘雇谤犀隘媒媚婿缅缆缔缕骚瑟鹉瑰搪聘斟靴靶蓖蒿蒲蓉楔椿楷榄楞楣酪碘硼碉辐辑频睹睦瞄嗜嗦暇畸跷跺蜈蜗蜕蛹嗅嗡嗤署蜀幌锚锥锨锭锰稚颓筷魁衙腻腮腺鹏肄猿颖煞雏馍馏禀痹廓痴靖誊漓溢溯溶滓溺寞窥窟寝褂裸谬媳嫉缚缤剿赘熬赫蔫摹蔓蔗蔼熙蔚兢榛榕酵碟碴碱碳辕辖雌墅嘁踊蝉嘀幔镀舔熏箍箕箫舆僧孵瘩瘟彰粹漱漩漾慷寡寥谭褐褪隧嫡缨撵撩撮撬擒墩撰鞍蕊蕴樊樟橄敷豌醇磕磅碾憋嘶嘲嘹蝠蝎蝌蝗蝙嘿幢镊镐稽篓膘鲤鲫褒瘪瘤瘫凛澎潭潦澳潘澈澜澄憔懊憎翩褥谴鹤憨履嬉豫缭撼擂擅蕾薛薇擎翰噩橱橙瓢蟥霍霎辙冀踱蹂蟆螃螟噪鹦黔穆篡篷篙篱儒膳鲸瘾瘸糙燎濒憾懈窿缰壕藐檬檐檩檀礁磷瞭瞬瞳瞪曙蹋蟋蟀嚎赡镣魏簇儡徽爵朦臊鳄糜癌懦豁臀藕藤瞻嚣鳍癞瀑襟璧戳攒孽蘑藻鳖蹭蹬簸簿蟹靡癣羹鬓攘蠕巍鳞糯譬霹躏髓蘸镶瓤矗";
		#endregion;

		#region GB2312
		/// <summary>
		/// GB2312所包含的一级汉字与二级汉字。
		/// </summary>
		public const string GB2312_CHARACTERS = "啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸白柏百摆佰败拜稗斑班搬扳般颁板版扮拌伴瓣半办绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞包褒剥薄雹保堡饱宝抱报暴豹鲍爆杯碑悲卑北辈背贝钡倍狈备惫焙被奔苯本笨崩绷甭泵蹦迸逼鼻比鄙笔彼碧蓖蔽毕毙毖币庇痹闭敝弊必辟壁臂避陛鞭边编贬扁便变卞辨辩辫遍标彪膘表鳖憋别瘪彬斌濒滨宾摈兵冰柄丙秉饼炳病并玻菠播拨钵波博勃搏铂箔伯帛舶脖膊渤泊驳捕卜哺补埠不布步簿部怖擦猜裁材才财睬踩采彩菜蔡餐参蚕残惭惨灿苍舱仓沧藏操糙槽曹草厕策侧册测层蹭插叉茬茶查碴搽察岔差诧拆柴豺搀掺蝉馋谗缠铲产阐颤昌猖场尝常长偿肠厂敞畅唱倡超抄钞朝嘲潮巢吵炒车扯撤掣彻澈郴臣辰尘晨忱沉陈趁衬撑称城橙成呈乘程惩澄诚承逞骋秤吃痴持匙池迟弛驰耻齿侈尺赤翅斥炽充冲虫崇宠抽酬畴踌稠愁筹仇绸瞅丑臭初出橱厨躇锄雏滁除楚础储矗搐触处揣川穿椽传船喘串疮窗幢床闯创吹炊捶锤垂春椿醇唇淳纯蠢戳绰疵茨磁雌辞慈瓷词此刺赐次聪葱囱匆从丛凑粗醋簇促蹿篡窜摧崔催脆瘁粹淬翠村存寸磋撮搓措挫错搭达答瘩打大呆歹傣戴带殆代贷袋待逮怠耽担丹单郸掸胆旦氮但惮淡诞弹蛋当挡党荡档刀捣蹈倒岛祷导到稻悼道盗德得的蹬灯登等瞪凳邓堤低滴迪敌笛狄涤翟嫡抵底地蒂第帝弟递缔颠掂滇碘点典靛垫电佃甸店惦奠淀殿碉叼雕凋刁掉吊钓调跌爹碟蝶迭谍叠丁盯叮钉顶鼎锭定订丢东冬董懂动栋侗恫冻洞兜抖斗陡豆逗痘都督毒犊独读堵睹赌杜镀肚度渡妒端短锻段断缎堆兑队对墩吨蹲敦顿囤钝盾遁掇哆多夺垛躲朵跺舵剁惰堕蛾峨鹅俄额讹娥恶厄扼遏鄂饿恩而儿耳尔饵洱二贰发罚筏伐乏阀法珐藩帆番翻樊矾钒繁凡烦反返范贩犯饭泛坊芳方肪房防妨仿访纺放菲非啡飞肥匪诽吠肺废沸费芬酚吩氛分纷坟焚汾粉奋份忿愤粪丰封枫蜂峰锋风疯烽逢冯缝讽奉凤佛否夫敷肤孵扶拂辐幅氟符伏俘服浮涪福袱弗甫抚辅俯釜斧脯腑府腐赴副覆赋复傅付阜父腹负富讣附妇缚咐噶嘎该改概钙盖溉干甘杆柑竿肝赶感秆敢赣冈刚钢缸肛纲岗港杠篙皋高膏羔糕搞镐稿告哥歌搁戈鸽胳疙割革葛格蛤阁隔铬个各给根跟耕更庚羹埂耿梗工攻功恭龚供躬公宫弓巩汞拱贡共钩勾沟苟狗垢构购够辜菇咕箍估沽孤姑鼓古蛊骨谷股故顾固雇刮瓜剐寡挂褂乖拐怪棺关官冠观管馆罐惯灌贯光广逛瑰规圭硅归龟闺轨鬼诡癸桂柜跪贵刽辊滚棍锅郭国果裹过哈骸孩海氦亥害骇酣憨邯韩含涵寒函喊罕翰撼捍旱憾悍焊汗汉夯杭航壕嚎豪毫郝好耗号浩呵喝荷菏核禾和何合盒貉阂河涸赫褐鹤贺嘿黑痕很狠恨哼亨横衡恒轰哄烘虹鸿洪宏弘红喉侯猴吼厚候后呼乎忽瑚壶葫胡蝴狐糊湖弧虎唬护互沪户花哗华猾滑画划化话槐徊怀淮坏欢环桓还缓换患唤痪豢焕涣宦幻荒慌黄磺蝗簧皇凰惶煌晃幌恍谎灰挥辉徽恢蛔回毁悔慧卉惠晦贿秽会烩汇讳诲绘荤昏婚魂浑混豁活伙火获或惑霍货祸击圾基机畸稽积箕肌饥迹激讥鸡姬绩缉吉极棘辑籍集及急疾汲即嫉级挤几脊己蓟技冀季伎祭剂悸济寄寂计记既忌际妓继纪嘉枷夹佳家加荚颊贾甲钾假稼价架驾嫁歼监坚尖笺间煎兼肩艰奸缄茧检柬碱硷拣捡简俭剪减荐槛鉴践贱见键箭件健舰剑饯渐溅涧建僵姜将浆江疆蒋桨奖讲匠酱降蕉椒礁焦胶交郊浇骄娇嚼搅铰矫侥脚狡角饺缴绞剿教酵轿较叫窖揭接皆秸街阶截劫节桔杰捷睫竭洁结解姐戒藉芥界借介疥诫届巾筋斤金今津襟紧锦仅谨进靳晋禁近烬浸尽劲荆兢茎睛晶鲸京惊精粳经井警景颈静境敬镜径痉靖竟竞净炯窘揪究纠玖韭久灸九酒厩救旧臼舅咎就疚鞠拘狙疽居驹菊局咀矩举沮聚拒据巨具距踞锯俱句惧炬剧捐鹃娟倦眷卷绢撅攫抉掘倔爵觉决诀绝均菌钧军君峻俊竣浚郡骏喀咖卡咯开揩楷凯慨刊堪勘坎砍看康慷糠扛抗亢炕考拷烤靠坷苛柯棵磕颗科壳咳可渴克刻客课肯啃垦恳坑吭空恐孔控抠口扣寇枯哭窟苦酷库裤夸垮挎跨胯块筷侩快宽款匡筐狂框矿眶旷况亏盔岿窥葵奎魁傀馈愧溃坤昆捆困括扩廓阔垃拉喇蜡腊辣啦莱来赖蓝婪栏拦篮阑兰澜谰揽览懒缆烂滥琅榔狼廊郎朗浪捞劳牢老佬姥酪烙涝勒乐雷镭蕾磊累儡垒擂肋类泪棱楞冷厘梨犁黎篱狸离漓理李里鲤礼莉荔吏栗丽厉励砾历利傈例俐痢立粒沥隶力璃哩俩联莲连镰廉怜涟帘敛脸链恋炼练粮凉梁粱良两辆量晾亮谅撩聊僚疗燎寥辽潦了撂镣廖料列裂烈劣猎琳林磷霖临邻鳞淋凛赁吝拎玲菱零龄铃伶羚凌灵陵岭领另令溜琉榴硫馏留刘瘤流柳六龙聋咙笼窿隆垄拢陇楼娄搂篓漏陋芦卢颅庐炉掳卤虏鲁麓碌露路赂鹿潞禄录陆戮驴吕铝侣旅履屡缕虑氯律率滤绿峦挛孪滦卵乱掠略抡轮伦仑沦纶论萝螺罗逻锣箩骡裸落洛骆络妈麻玛码蚂马骂嘛吗埋买麦卖迈脉瞒馒蛮满蔓曼慢漫谩芒茫盲氓忙莽猫茅锚毛矛铆卯茂冒帽貌贸么玫枚梅酶霉煤没眉媒镁每美昧寐妹媚门闷们萌蒙檬盟锰猛梦孟眯醚靡糜迷谜弥米秘觅泌蜜密幂棉眠绵冕免勉娩缅面苗描瞄藐秒渺庙妙蔑灭民抿皿敏悯闽明螟鸣铭名命谬摸摹蘑模膜磨摩魔抹末莫墨默沫漠寞陌谋牟某拇牡亩姆母墓暮幕募慕木目睦牧穆拿哪呐钠那娜纳氖乃奶耐奈南男难囊挠脑恼闹淖呢馁内嫩能妮霓倪泥尼拟你匿腻逆溺蔫拈年碾撵捻念娘酿鸟尿捏聂孽啮镊镍涅您柠狞凝宁拧泞牛扭钮纽脓浓农弄奴努怒女暖虐疟挪懦糯诺哦欧鸥殴藕呕偶沤啪趴爬帕怕琶拍排牌徘湃派攀潘盘磐盼畔判叛乓庞旁耪胖抛咆刨炮袍跑泡呸胚培裴赔陪配佩沛喷盆砰抨烹澎彭蓬棚硼篷膨朋鹏捧碰坯砒霹批披劈琵毗啤脾疲皮匹痞僻屁譬篇偏片骗飘漂瓢票撇瞥拼频贫品聘乒坪苹萍平凭瓶评屏坡泼颇婆破魄迫粕剖扑铺仆莆葡菩蒲埔朴圃普浦谱曝瀑期欺栖戚妻七凄漆柒沏其棋奇歧畦崎脐齐旗祈祁骑起岂乞企启契砌器气迄弃汽泣讫掐恰洽牵扦钎铅千迁签仟谦乾黔钱钳前潜遣浅谴堑嵌欠歉枪呛腔羌墙蔷强抢橇锹敲悄桥瞧乔侨巧鞘撬翘峭俏窍切茄且怯窃钦侵亲秦琴勤芹擒禽寝沁青轻氢倾卿清擎晴氰情顷请庆琼穷秋丘邱球求囚酋泅趋区蛆曲躯屈驱渠取娶龋趣去圈颧权醛泉全痊拳犬券劝缺炔瘸却鹊榷确雀裙群然燃冉染瓤壤攘嚷让饶扰绕惹热壬仁人忍韧任认刃妊纫扔仍日戎茸蓉荣融熔溶容绒冗揉柔肉茹蠕儒孺如辱乳汝入褥软阮蕊瑞锐闰润若弱撒洒萨腮鳃塞赛三叁伞散桑嗓丧搔骚扫嫂瑟色涩森僧莎砂杀刹沙纱傻啥煞筛晒珊苫杉山删煽衫闪陕擅赡膳善汕扇缮墒伤商赏晌上尚裳梢捎稍烧芍勺韶少哨邵绍奢赊蛇舌舍赦摄射慑涉社设砷申呻伸身深娠绅神沈审婶甚肾慎渗声生甥牲升绳省盛剩胜圣师失狮施湿诗尸虱十石拾时什食蚀实识史矢使屎驶始式示士世柿事拭誓逝势是嗜噬适仕侍释饰氏市恃室视试收手首守寿授售受瘦兽蔬枢梳殊抒输叔舒淑疏书赎孰熟薯暑曙署蜀黍鼠属术述树束戍竖墅庶数漱恕刷耍摔衰甩帅栓拴霜双爽谁水睡税吮瞬顺舜说硕朔烁斯撕嘶思私司丝死肆寺嗣四伺似饲巳松耸怂颂送宋讼诵搜艘擞嗽苏酥俗素速粟僳塑溯宿诉肃酸蒜算虽隋随绥髓碎岁穗遂隧祟孙损笋蓑梭唆缩琐索锁所塌他它她塔獭挞蹋踏胎苔抬台泰酞太态汰坍摊贪瘫滩坛檀痰潭谭谈坦毯袒碳探叹炭汤塘搪堂棠膛唐糖倘躺淌趟烫掏涛滔绦萄桃逃淘陶讨套特藤腾疼誊梯剔踢锑提题蹄啼体替嚏惕涕剃屉天添填田甜恬舔腆挑条迢眺跳贴铁帖厅听烃汀廷停亭庭挺艇通桐酮瞳同铜彤童桶捅筒统痛偷投头透凸秃突图徒途涂屠土吐兔湍团推颓腿蜕褪退吞屯臀拖托脱鸵陀驮驼椭妥拓唾挖哇蛙洼娃瓦袜歪外豌弯湾玩顽丸烷完碗挽晚皖惋宛婉万腕汪王亡枉网往旺望忘妄威巍微危韦违桅围唯惟为潍维苇萎委伟伪尾纬未蔚味畏胃喂魏位渭谓尉慰卫瘟温蚊文闻纹吻稳紊问嗡翁瓮挝蜗涡窝我斡卧握沃巫呜钨乌污诬屋无芜梧吾吴毋武五捂午舞伍侮坞戊雾晤物勿务悟误昔熙析西硒矽晰嘻吸锡牺稀息希悉膝夕惜熄烯溪汐犀檄袭席习媳喜铣洗系隙戏细瞎虾匣霞辖暇峡侠狭下厦夏吓掀锨先仙鲜纤咸贤衔舷闲涎弦嫌显险现献县腺馅羡宪陷限线相厢镶香箱襄湘乡翔祥详想响享项巷橡像向象萧硝霄削哮嚣销消宵淆晓小孝校肖啸笑效楔些歇蝎鞋协挟携邪斜胁谐写械卸蟹懈泄泻谢屑薪芯锌欣辛新忻心信衅星腥猩惺兴刑型形邢行醒幸杏性姓兄凶胸匈汹雄熊休修羞朽嗅锈秀袖绣墟戌需虚嘘须徐许蓄酗叙旭序畜恤絮婿绪续轩喧宣悬旋玄选癣眩绚靴薛学穴雪血勋熏循旬询寻驯巡殉汛训讯逊迅压押鸦鸭呀丫芽牙蚜崖衙涯雅哑亚讶焉咽阉烟淹盐严研蜒岩延言颜阎炎沿奄掩眼衍演艳堰燕厌砚雁唁彦焰宴谚验殃央鸯秧杨扬佯疡羊洋阳氧仰痒养样漾邀腰妖瑶摇尧遥窑谣姚咬舀药要耀椰噎耶爷野冶也页掖业叶曳腋夜液一壹医揖铱依伊衣颐夷遗移仪胰疑沂宜姨彝椅蚁倚已乙矣以艺抑易邑屹亿役臆逸肄疫亦裔意毅忆义益溢诣议谊译异翼翌绎茵荫因殷音阴姻吟银淫寅饮尹引隐印英樱婴鹰应缨莹萤营荧蝇迎赢盈影颖硬映哟拥佣臃痈庸雍踊蛹咏泳涌永恿勇用幽优悠忧尤由邮铀犹油游酉有友右佑釉诱又幼迂淤于盂榆虞愚舆余俞逾鱼愉渝渔隅予娱雨与屿禹宇语羽玉域芋郁吁遇喻峪御愈欲狱育誉浴寓裕预豫驭鸳渊冤元垣袁原援辕园员圆猿源缘远苑愿怨院曰约越跃钥岳粤月悦阅耘云郧匀陨允运蕴酝晕韵孕匝砸杂栽哉灾宰载再在咱攒暂赞赃脏葬遭糟凿藻枣早澡蚤躁噪造皂灶燥责择则泽贼怎增憎曾赠扎喳渣札轧铡闸眨栅榨咋乍炸诈摘斋宅窄债寨瞻毡詹粘沾盏斩辗崭展蘸栈占战站湛绽樟章彰漳张掌涨杖丈帐账仗胀瘴障招昭找沼赵照罩兆肇召遮折哲蛰辙者锗蔗这浙珍斟真甄砧臻贞针侦枕疹诊震振镇阵蒸挣睁征狰争怔整拯正政帧症郑证芝枝支吱蜘知肢脂汁之织职直植殖执值侄址指止趾只旨纸志挚掷至致置帜峙制智秩稚质炙痔滞治窒中盅忠钟衷终种肿重仲众舟周州洲诌粥轴肘帚咒皱宙昼骤珠株蛛朱猪诸诛逐竹烛煮拄瞩嘱主著柱助蛀贮铸筑住注祝驻抓爪拽专砖转撰赚篆桩庄装妆撞壮状椎锥追赘坠缀谆准捉拙卓桌琢茁酌啄着灼浊兹咨资姿滋淄孜紫仔籽滓子自渍字鬃棕踪宗综总纵邹走奏揍租足卒族祖诅阻组钻纂嘴醉最罪尊遵昨左佐柞做作坐座亍丌兀丐廿卅丕亘丞鬲孬噩丨禺丿匕乇夭爻卮氐囟胤馗毓睾鼗丶亟鼐乜乩亓芈孛啬嘏仄厍厝厣厥厮靥赝匚叵匦匮匾赜卦卣刂刈刎刭刳刿剀剌剞剡剜蒯剽劂劁劐劓冂罔亻仃仉仂仨仡仫仞伛仳伢佤仵伥伧伉伫佞佧攸佚佝佟佗伲伽佶佴侑侉侃侏佾佻侪佼侬侔俦俨俪俅俚俣俜俑俟俸倩偌俳倬倏倮倭俾倜倌倥倨偾偃偕偈偎偬偻傥傧傩傺僖儆僭僬僦僮儇儋仝氽佘佥俎龠汆籴兮巽黉馘冁夔勹匍訇匐凫夙兕亠兖亳衮袤亵脔裒禀嬴蠃羸冫冱冽冼凇冖冢冥讠讦讧讪讴讵讷诂诃诋诏诎诒诓诔诖诘诙诜诟诠诤诨诩诮诰诳诶诹诼诿谀谂谄谇谌谏谑谒谔谕谖谙谛谘谝谟谠谡谥谧谪谫谮谯谲谳谵谶卩卺阝阢阡阱阪阽阼陂陉陔陟陧陬陲陴隈隍隗隰邗邛邝邙邬邡邴邳邶邺邸邰郏郅邾郐郄郇郓郦郢郜郗郛郫郯郾鄄鄢鄞鄣鄱鄯鄹酃酆刍奂劢劬劭劾哿勐勖勰叟燮矍廴凵凼鬯厶弁畚巯坌垩垡塾墼壅壑圩圬圪圳圹圮圯坜圻坂坩垅坫垆坼坻坨坭坶坳垭垤垌垲埏垧垴垓垠埕埘埚埙埒垸埴埯埸埤埝堋堍埽埭堀堞堙塄堠塥塬墁墉墚墀馨鼙懿艹艽艿芏芊芨芄芎芑芗芙芫芸芾芰苈苊苣芘芷芮苋苌苁芩芴芡芪芟苄苎芤苡茉苷苤茏茇苜苴苒苘茌苻苓茑茚茆茔茕苠苕茜荑荛荜茈莒茼茴茱莛荞茯荏荇荃荟荀茗荠茭茺茳荦荥荨茛荩荬荪荭荮莰荸莳莴莠莪莓莜莅荼莶莩荽莸荻莘莞莨莺莼菁萁菥菘堇萘萋菝菽菖萜萸萑萆菔菟萏萃菸菹菪菅菀萦菰菡葜葑葚葙葳蒇蒈葺蒉葸萼葆葩葶蒌蒎萱葭蓁蓍蓐蓦蒽蓓蓊蒿蒺蓠蒡蒹蒴蒗蓥蓣蔌甍蔸蓰蔹蔟蔺蕖蔻蓿蓼蕙蕈蕨蕤蕞蕺瞢蕃蕲蕻薤薨薇薏蕹薮薜薅薹薷薰藓藁藜藿蘧蘅蘩蘖蘼廾弈夼奁耷奕奚奘匏尢尥尬尴扌扪抟抻拊拚拗拮挢拶挹捋捃掭揶捱捺掎掴捭掬掊捩掮掼揲揸揠揿揄揞揎摒揆掾摅摁搋搛搠搌搦搡摞撄摭撖摺撷撸撙撺擀擐擗擤擢攉攥攮弋忒甙弑卟叱叽叩叨叻吒吖吆呋呒呓呔呖呃吡呗呙吣吲咂咔呷呱呤咚咛咄呶呦咝哐咭哂咴哒咧咦哓哔呲咣哕咻咿哌哙哚哜咩咪咤哝哏哞唛哧唠哽唔哳唢唣唏唑唧唪啧喏喵啉啭啁啕唿啐唼唷啖啵啶啷唳唰啜喋嗒喃喱喹喈喁喟啾嗖喑啻嗟喽喾喔喙嗪嗷嗉嘟嗑嗫嗬嗔嗦嗝嗄嗯嗥嗲嗳嗌嗍嗨嗵嗤辔嘞嘈嘌嘁嘤嘣嗾嘀嘧嘭噘嘹噗嘬噍噢噙噜噌噔嚆噤噱噫噻噼嚅嚓嚯囔囗囝囡囵囫囹囿圄圊圉圜帏帙帔帑帱帻帼帷幄幔幛幞幡岌屺岍岐岖岈岘岙岑岚岜岵岢岽岬岫岱岣峁岷峄峒峤峋峥崂崃崧崦崮崤崞崆崛嵘崾崴崽嵬嵛嵯嵝嵫嵋嵊嵩嵴嶂嶙嶝豳嶷巅彳彷徂徇徉後徕徙徜徨徭徵徼衢彡犭犰犴犷犸狃狁狎狍狒狨狯狩狲狴狷猁狳猃狺狻猗猓猡猊猞猝猕猢猹猥猬猸猱獐獍獗獠獬獯獾舛夥飧夤夂饣饧饨饩饪饫饬饴饷饽馀馄馇馊馍馐馑馓馔馕庀庑庋庖庥庠庹庵庾庳赓廒廑廛廨廪膺忄忉忖忏怃忮怄忡忤忾怅怆忪忭忸怙怵怦怛怏怍怩怫怊怿怡恸恹恻恺恂恪恽悖悚悭悝悃悒悌悛惬悻悱惝惘惆惚悴愠愦愕愣惴愀愎愫慊慵憬憔憧憷懔懵忝隳闩闫闱闳闵闶闼闾阃阄阆阈阊阋阌阍阏阒阕阖阗阙阚丬爿戕氵汔汜汊沣沅沐沔沌汨汩汴汶沆沩泐泔沭泷泸泱泗沲泠泖泺泫泮沱泓泯泾洹洧洌浃浈洇洄洙洎洫浍洮洵洚浏浒浔洳涑浯涞涠浞涓涔浜浠浼浣渚淇淅淞渎涿淠渑淦淝淙渖涫渌涮渫湮湎湫溲湟溆湓湔渲渥湄滟溱溘滠漭滢溥溧溽溻溷滗溴滏溏滂溟潢潆潇漤漕滹漯漶潋潴漪漉漩澉澍澌潸潲潼潺濑濉澧澹澶濂濡濮濞濠濯瀚瀣瀛瀹瀵灏灞宀宄宕宓宥宸甯骞搴寤寮褰寰蹇謇辶迓迕迥迮迤迩迦迳迨逅逄逋逦逑逍逖逡逵逶逭逯遄遑遒遐遨遘遢遛暹遴遽邂邈邃邋彐彗彖彘尻咫屐屙孱屣屦羼弪弩弭艴弼鬻屮妁妃妍妩妪妣妗姊妫妞妤姒妲妯姗妾娅娆姝娈姣姘姹娌娉娲娴娑娣娓婀婧婊婕娼婢婵胬媪媛婷婺媾嫫媲嫒嫔媸嫠嫣嫱嫖嫦嫘嫜嬉嬗嬖嬲嬷孀尕尜孚孥孳孑孓孢驵驷驸驺驿驽骀骁骅骈骊骐骒骓骖骘骛骜骝骟骠骢骣骥骧纟纡纣纥纨纩纭纰纾绀绁绂绉绋绌绐绔绗绛绠绡绨绫绮绯绱绲缍绶绺绻绾缁缂缃缇缈缋缌缏缑缒缗缙缜缛缟缡缢缣缤缥缦缧缪缫缬缭缯缰缱缲缳缵幺畿巛甾邕玎玑玮玢玟珏珂珑玷玳珀珉珈珥珙顼琊珩珧珞玺珲琏琪瑛琦琥琨琰琮琬琛琚瑁瑜瑗瑕瑙瑷瑭瑾璜璎璀璁璇璋璞璨璩璐璧瓒璺韪韫韬杌杓杞杈杩枥枇杪杳枘枧杵枨枞枭枋杷杼柰栉柘栊柩枰栌柙枵柚枳柝栀柃枸柢栎柁柽栲栳桠桡桎桢桄桤梃栝桕桦桁桧桀栾桊桉栩梵梏桴桷梓桫棂楮棼椟椠棹椤棰椋椁楗棣椐楱椹楠楂楝榄楫榀榘楸椴槌榇榈槎榉楦楣楹榛榧榻榫榭槔榱槁槊槟榕槠榍槿樯槭樗樘橥槲橄樾檠橐橛樵檎橹樽樨橘橼檑檐檩檗檫猷獒殁殂殇殄殒殓殍殚殛殡殪轫轭轱轲轳轵轶轸轷轹轺轼轾辁辂辄辇辋辍辎辏辘辚軎戋戗戛戟戢戡戥戤戬臧瓯瓴瓿甏甑甓攴旮旯旰昊昙杲昃昕昀炅曷昝昴昱昶昵耆晟晔晁晏晖晡晗晷暄暌暧暝暾曛曜曦曩贲贳贶贻贽赀赅赆赈赉赇赍赕赙觇觊觋觌觎觏觐觑牮犟牝牦牯牾牿犄犋犍犏犒挈挲掰搿擘耄毪毳毽毵毹氅氇氆氍氕氘氙氚氡氩氤氪氲攵敕敫牍牒牖爰虢刖肟肜肓肼朊肽肱肫肭肴肷胧胨胩胪胛胂胄胙胍胗朐胝胫胱胴胭脍脎胲胼朕脒豚脶脞脬脘脲腈腌腓腴腙腚腱腠腩腼腽腭腧塍媵膈膂膑滕膣膪臌朦臊膻臁膦欤欷欹歃歆歙飑飒飓飕飙飚殳彀毂觳斐齑斓於旆旄旃旌旎旒旖炀炜炖炝炻烀炷炫炱烨烊焐焓焖焯焱煳煜煨煅煲煊煸煺熘熳熵熨熠燠燔燧燹爝爨灬焘煦熹戾戽扃扈扉礻祀祆祉祛祜祓祚祢祗祠祯祧祺禅禊禚禧禳忑忐怼恝恚恧恁恙恣悫愆愍慝憩憝懋懑戆肀聿沓泶淼矶矸砀砉砗砘砑斫砭砜砝砹砺砻砟砼砥砬砣砩硎硭硖硗砦硐硇硌硪碛碓碚碇碜碡碣碲碹碥磔磙磉磬磲礅磴礓礤礞礴龛黹黻黼盱眄眍盹眇眈眚眢眙眭眦眵眸睐睑睇睃睚睨睢睥睿瞍睽瞀瞌瞑瞟瞠瞰瞵瞽町畀畎畋畈畛畲畹疃罘罡罟詈罨罴罱罹羁罾盍盥蠲钅钆钇钋钊钌钍钏钐钔钗钕钚钛钜钣钤钫钪钭钬钯钰钲钴钶钷钸钹钺钼钽钿铄铈铉铊铋铌铍铎铐铑铒铕铖铗铙铘铛铞铟铠铢铤铥铧铨铪铩铫铮铯铳铴铵铷铹铼铽铿锃锂锆锇锉锊锍锎锏锒锓锔锕锖锘锛锝锞锟锢锪锫锩锬锱锲锴锶锷锸锼锾锿镂锵镄镅镆镉镌镎镏镒镓镔镖镗镘镙镛镞镟镝镡镢镤镥镦镧镨镩镪镫镬镯镱镲镳锺矧矬雉秕秭秣秫稆嵇稃稂稞稔稹稷穑黏馥穰皈皎皓皙皤瓞瓠甬鸠鸢鸨鸩鸪鸫鸬鸲鸱鸶鸸鸷鸹鸺鸾鹁鹂鹄鹆鹇鹈鹉鹋鹌鹎鹑鹕鹗鹚鹛鹜鹞鹣鹦鹧鹨鹩鹪鹫鹬鹱鹭鹳疒疔疖疠疝疬疣疳疴疸痄疱疰痃痂痖痍痣痨痦痤痫痧瘃痱痼痿瘐瘀瘅瘌瘗瘊瘥瘘瘕瘙瘛瘼瘢瘠癀瘭瘰瘿瘵癃瘾瘳癍癞癔癜癖癫癯翊竦穸穹窀窆窈窕窦窠窬窨窭窳衤衩衲衽衿袂袢裆袷袼裉裢裎裣裥裱褚裼裨裾裰褡褙褓褛褊褴褫褶襁襦襻疋胥皲皴矜耒耔耖耜耠耢耥耦耧耩耨耱耋耵聃聆聍聒聩聱覃顸颀颃颉颌颍颏颔颚颛颞颟颡颢颥颦虍虔虬虮虿虺虼虻蚨蚍蚋蚬蚝蚧蚣蚪蚓蚩蚶蛄蚵蛎蚰蚺蚱蚯蛉蛏蚴蛩蛱蛲蛭蛳蛐蜓蛞蛴蛟蛘蛑蜃蜇蛸蜈蜊蜍蜉蜣蜻蜞蜥蜮蜚蜾蝈蜴蜱蜩蜷蜿螂蜢蝽蝾蝻蝠蝰蝌蝮螋蝓蝣蝼蝤蝙蝥螓螯螨蟒蟆螈螅螭螗螃螫蟥螬螵螳蟋蟓螽蟑蟀蟊蟛蟪蟠蟮蠖蠓蟾蠊蠛蠡蠹蠼缶罂罄罅舐竺竽笈笃笄笕笊笫笏筇笸笪笙笮笱笠笥笤笳笾笞筘筚筅筵筌筝筠筮筻筢筲筱箐箦箧箸箬箝箨箅箪箜箢箫箴篑篁篌篝篚篥篦篪簌篾篼簏簖簋簟簪簦簸籁籀臾舁舂舄臬衄舡舢舣舭舯舨舫舸舻舳舴舾艄艉艋艏艚艟艨衾袅袈裘裟襞羝羟羧羯羰羲籼敉粑粝粜粞粢粲粼粽糁糇糌糍糈糅糗糨艮暨羿翎翕翥翡翦翩翮翳糸絷綦綮繇纛麸麴赳趄趔趑趱赧赭豇豉酊酐酎酏酤酢酡酰酩酯酽酾酲酴酹醌醅醐醍醑醢醣醪醭醮醯醵醴醺豕鹾趸跫踅蹙蹩趵趿趼趺跄跖跗跚跞跎跏跛跆跬跷跸跣跹跻跤踉跽踔踝踟踬踮踣踯踺蹀踹踵踽踱蹉蹁蹂蹑蹒蹊蹰蹶蹼蹯蹴躅躏躔躐躜躞豸貂貊貅貘貔斛觖觞觚觜觥觫觯訾謦靓雩雳雯霆霁霈霏霎霪霭霰霾龀龃龅龆龇龈龉龊龌黾鼋鼍隹隼隽雎雒瞿雠銎銮鋈錾鍪鏊鎏鐾鑫鱿鲂鲅鲆鲇鲈稣鲋鲎鲐鲑鲒鲔鲕鲚鲛鲞鲟鲠鲡鲢鲣鲥鲦鲧鲨鲩鲫鲭鲮鲰鲱鲲鲳鲴鲵鲶鲷鲺鲻鲼鲽鳄鳅鳆鳇鳊鳋鳌鳍鳎鳏鳐鳓鳔鳕鳗鳘鳙鳜鳝鳟鳢靼鞅鞑鞒鞔鞯鞫鞣鞲鞴骱骰骷鹘骶骺骼髁髀髅髂髋髌髑魅魃魇魉魈魍魑飨餍餮饕饔髟髡髦髯髫髻髭髹鬈鬏鬓鬟鬣麽麾縻麂麇麈麋麒鏖麝麟黛黜黝黠黟黢黩黧黥黪黯鼢鼬鼯鼹鼷鼽鼾齄";

		#endregion

		#region 地理名称大全
		/// <summary>
		/// 地理名称大全
		/// </summary>
		public static HashSet<string> GeographicalNames { get; } = new HashSet<string> { "北京市", "东城区", "西城区", "崇文区", "宣武区", "朝阳区", "海淀区", "丰台区", "房山区", "通州区", "顺义区", "昌平区", "大兴区", "怀柔区", "平谷区", "密云县", "延庆县", "门头沟区", "石景山区", "天津市", "和平区", "河东区", "河西区", "南开区", "河北区", "红桥区", "塘沽区", "汉沽区", "大港区", "东丽区", "西青区", "北辰区", "津南区", "武清区", "宝坻区", "静海县", "宁河县", "蓟县", "河北省", "辛集市", "藁城市", "晋州市", "新乐市", "鹿泉市", "平山县", "井陉县", "栾城县", "正定县", "行唐县", "灵寿县", "高邑县", "赵县", "赞皇县", "深泽县", "无极县", "元氏县", "唐山市", "遵化市", "迁安市", "迁西县", "滦南县", "玉田县", "唐海县", "乐亭县", "滦县", "昌黎县", "卢龙县", "抚宁县", "邯郸市", "武安市", "邯郸县", "永年县", "曲周县", "馆陶县", "魏县", "成安县", "大名县", "涉县", "鸡泽县", "邱县", "广平县", "肥乡县", "临漳县", "磁县", "邢台市", "南宫市", "沙河市", "邢台县", "柏乡县", "任县", "清河县", "宁晋县", "威县", "隆尧县", "临城县", "广宗县", "临西县", "内丘县", "平乡县", "巨鹿县", "新河县", "南和县", "保定市", "涿州市", "定州市", "安国市", "满城县", "清苑县", "涞水县", "阜平县", "徐水县", "定兴县", "唐县", "高阳县", "容城县", "涞源县", "望都县", "安新县", "易县", "曲阳县", "蠡县", "顺平县", "博野县", "雄县", "宣化县", "康保县", "张北县", "阳原县", "赤城县", "沽源县", "怀安县", "怀来县", "崇礼县", "尚义县", "蔚县", "涿鹿县", "万全县", "承德市", "承德县", "兴隆县", "隆化县", "平泉县", "滦平县", "沧州市", "泊头市", "任丘市", "黄骅市", "河间市", "沧县", "青", "县献", "县", "东光县", "海兴县", "盐山县", "肃宁县", "南皮县", "吴桥县", "廊坊市", "霸州市", "三河市", "固安县", "永清县", "香河县", "大城县", "文安县", "衡水市", "冀州市", "深州市", "饶阳县", "枣强县", "故城县", "阜城县", "安平县", "武邑县", "景县", "武强县", "石家庄市", "张家口市", "高碑店市", "秦皇岛市", "大厂回族自治县", "青龙满族自治县", "丰宁满族自治县", "宽城满族自治县", "孟村回族自治县", "围场满族蒙古族自治县", "山西省", "太原市", "古交市", "阳曲县", "清徐县", "娄烦县", "大同市", "大同县", "天镇县", "灵丘县", "阳高县", "左云县", "广灵县", "浑源县", "阳泉市", "平定县", "盂县", "长治市", "潞城市", "长治县", "长子县", "平顺县", "襄垣县", "沁源县", "屯留县", "黎城县", "武乡县", "沁县", "壶关县", "晋城市", "高平市", "泽州县", "陵川县", "阳城县", "沁水县", "朔州市", "山阴县", "右玉县", "应县", "怀仁县", "晋中市", "介休市", "昔阳县", "灵石县", "祁县", "左权县", "寿阳县", "太谷县", "和顺县", "平遥县", "榆社县", "运城市", "河津市", "永济市", "闻喜县", "新绛县", "平陆县", "垣曲县", "绛县", "稷山县", "芮城县", "夏县", "万荣县", "临猗县", "忻州市", "原平市", "代县", "神池县", "五寨县", "五台县", "偏关县", "宁武县", "静乐县", "繁峙县", "河曲县", "保德县", "定襄县", "岢岚县", "临汾市", "侯马市", "霍州市", "汾西县", "吉县", "安泽县", "大宁县", "浮山县", "古县", "隰", "县", "襄汾县", "翼城县", "永和县", "乡宁县", "曲沃县", "洪洞县", "蒲县", "吕梁市", "孝义市", "汾阳市", "文水县", "中阳县", "兴县", "临", "县", "方山县", "柳林县", "岚县", "交口县", "交城县", "石楼县", "内蒙古自治区", "武川县", "包头市", "固阳县", "乌海市", "赤峰市", "宁城县", "林西县", "敖汉旗", "开鲁县", "通辽市", "库伦旗", "奈曼旗", "乌审旗", "杭锦旗", "根河市", "阿荣旗", "五原县", "磴口县", "丰镇市", "兴和县", "卓资县", "商都县", "凉城县", "化德县", "多伦县", "正蓝旗", "镶黄旗", "兴安盟", "突泉县", "托克托县", "清水河县", "喀喇沁旗", "巴林左旗", "翁牛特旗", "巴林右旗", "扎鲁特旗", "准格尔旗", "鄂托克旗", "达拉特旗", "满洲里市", "牙克石市", "扎兰屯市", "杭锦后旗", "四子王旗", "阿巴嘎旗", "太仆寺旗", "正镶白旗", "阿尔山市", "扎赉特旗", "阿拉善盟", "额济纳旗", "呼和浩特市", "和林格尔县", "土默特左旗", "土默特右旗", "克什克腾旗", "霍林郭勒市", "鄂尔多斯市", "伊金霍洛旗", "鄂托克前旗", "呼伦贝尔市", "额尔古纳市", "陈巴尔虎旗", "巴彦淖尔市", "乌拉特中旗", "乌拉特前旗", "乌拉特后旗", "乌兰察布市", "锡林浩特市", "二连浩特市", "苏尼特左旗", "苏尼特右旗", "锡林郭勒盟", "乌兰浩特市", "阿拉善左旗", "阿拉善右旗", "阿鲁科尔沁旗", "新巴尔虎左旗", "新巴尔虎右旗", "鄂伦春自治旗", "西乌珠穆沁旗", "东乌珠穆沁旗", "科尔沁左翼中旗", "科尔沁左翼后旗", "鄂温克族自治旗", "察哈尔右翼前旗", "察哈尔右翼中旗", "察哈尔右翼后旗", "科尔沁右翼前旗", "科尔沁右翼中旗", "达尔罕茂明安联合旗", "莫力达瓦达斡尔族自治旗", "辽宁省", "沈阳市", "新民市", "法库县", "辽中县", "康平县", "大连市", "庄河市", "长海县", "鞍山市", "海城市", "台安县", "抚顺市", "抚顺县", "本溪市", "丹东市", "东港市", "凤城市", "锦州市", "凌海市", "北宁市", "黑山县", "义县", "营口市", "盖州市", "阜新市", "彰武县", "辽阳市", "灯塔市", "辽阳县", "盘锦市", "盘山县", "大洼县", "铁岭市", "开原市", "铁岭县", "昌图县", "西丰县", "朝阳市", "凌源市", "北票市", "朝阳县", "建平县", "兴城市", "绥中县", "建昌县", "大石桥市", "瓦房店市", "普兰店市", "调兵山市", "葫芦岛市", "岫岩满族自治县", "清原满族自治县", "新宾满族自治县", "阜新蒙古族自治县", "宽甸满族自治县", "桓仁满族自治县", "本溪满族自治县", "喀喇沁左翼蒙古族自治县", "吉林省", "长春市", "九台市", "榆树市", "德惠市", "农安县", "吉林市", "舒兰市", "桦甸市", "蛟河市", "磐石市", "永吉县", "四平市", "双辽市", "梨树县", "辽源市", "东辽县", "东丰县", "通化市", "集安市", "通化县", "辉南县", "柳河县", "白山市", "临江市", "靖宇县", "抚松县", "江源县", "松原市", "乾安县", "长岭县", "扶余县", "白城市", "大安市", "洮南市", "镇赉县", "通榆县", "延吉市", "图们市", "敦化市", "龙井市", "珲春市", "和龙市", "安图县", "汪清县", "公主岭市", "梅河口市", "伊通满族自治县", "长白朝鲜族自治县", "延边朝鲜族自治州", "前郭尔罗斯蒙古族自治县", "黑龙江省", "阿城市", "尚志市", "双城市", "五常市", "方正县", "宾县", "依兰县", "巴彦县", "通河县", "木兰县", "延寿县", "讷河市", "富裕县", "拜泉县", "甘南县", "依安县", "克山县", "泰来县", "克东县", "龙江县", "鹤岗市", "萝北县", "绥滨县", "集贤县", "宝清县", "友谊县", "饶河县", "鸡西市", "密山市", "虎林市", "鸡东县", "大庆市", "林甸县", "肇州县", "肇源县", "漠河县", "伊春市", "铁力市", "嘉荫县", "宁安市", "海林市", "穆棱市", "林口县", "东宁县", "同江市", "富锦市", "桦川县", "抚远县", "桦南县", "汤原县", "勃利县", "黑河市", "北安市", "逊克县", "嫩江县", "孙吴县", "绥化市", "安达市", "肇东市", "海伦市", "绥棱县", "兰西县", "明水县", "青冈县", "庆安县", "望奎县", "呼玛县", "塔河县", "七台河市", "双鸭山市", "牡丹江市", "佳木斯市", "绥芬河市", "哈尔滨市", "齐齐哈尔市", "五大连池市", "杜尔伯特蒙古族自治县", "上海市", "黄浦区", "卢湾区", "徐汇区", "长宁区", "静安区", "普陀区", "闸北区", "虹口区", "杨浦区", "宝山区", "闵行区", "嘉定区", "松江区", "金山区", "青浦区", "南汇区", "奉贤区", "崇明县浦东新区", "江苏省", "南京市", "溧水县", "高淳县", "无锡市", "江阴市", "宜兴市", "徐州市", "邳州市", "新沂市", "铜山县", "睢宁县", "沛县", "丰", "县", "常州市", "金坛市", "溧阳市", "苏州市", "常熟市", "太仓市", "昆山市", "吴江市", "南通市", "如皋市", "通州市", "海门市", "启东市", "海安县", "如东县", "东海县", "灌云县", "赣榆县", "灌南县", "淮安市", "涟水县", "洪泽县", "金湖县", "盱眙县", "盐城市", "东台市", "大丰市", "建湖县", "响水县", "阜宁县", "射阳县", "滨海县", "扬州市", "高邮市", "江都市", "仪征市", "宝应县", "镇江市", "丹阳市", "扬中市", "句容市", "泰州市", "泰兴市", "姜堰市", "靖江市", "兴化市", "宿迁市", "沭阳县", "泗阳县", "泗洪县", "连云港市", "张家港市", "浙江省", "杭州市", "建德市", "富阳市", "临安市", "桐庐县", "淳安县", "宁波市", "余姚市", "慈溪市", "奉化市", "宁海县", "象山县", "温州市", "瑞安市", "乐清市", "永嘉县", "洞头县", "平阳县", "苍南县", "文成县", "泰顺县", "嘉兴市", "海宁市", "平湖市", "桐乡市", "嘉善县", "海盐县", "湖州市", "长兴县", "德清县", "安吉县", "绍兴市", "诸暨市", "上虞市", "嵊州市", "绍兴县", "新昌县", "金华市", "兰溪市", "义乌市", "东阳市", "永康市", "武义县", "浦江县", "磐安县", "衢州市", "江山市", "龙游县", "常山县", "开化县", "舟山市", "岱山县", "嵊泗县", "台州市", "临海市", "玉环县", "天台县", "仙居县", "三门县", "丽水市", "龙泉市", "缙云县", "青田县", "云和县", "遂昌县", "松阳县", "庆元县", "景宁畲族自治县", "安徽省", "合肥市", "长丰县", "肥东县", "肥西县", "芜湖市", "芜湖县", "南陵县", "繁昌县", "蚌埠市", "怀远县", "固镇县", "五河县", "淮南市", "凤台县", "当涂县", "淮北市", "濉溪县", "铜陵市", "安庆市", "桐城市", "宿松县", "枞阳县", "太湖县", "怀宁县", "岳西县", "望江县", "潜山县", "黄山市", "休宁县", "歙县", "祁门县", "黟县", "滁州市", "天长市", "明光市", "全椒县", "来安县", "定远县", "凤阳县", "阜阳市", "界首市", "临泉县", "颍上县", "阜南县", "太和县", "宿州市", "萧县", "泗", "县", "砀山县", "灵璧县", "巢湖市", "含山县", "无为县", "庐江县", "和县", "六安市", "寿县", "霍山县", "霍邱县", "舒城县", "金寨县", "亳州市", "利辛县", "涡阳县", "蒙城县", "池州市", "东至县", "石台县", "青阳县", "宣城市", "宁国市", "广德县", "郎溪县", "泾县", "旌德县", "绩溪县", "马鞍山市", "福建省", "福州市", "福清市", "长乐市", "闽侯县", "闽清县", "永泰县", "连江县", "罗源县", "平潭县", "厦门市", "莆田市", "仙游县", "三明市", "永安市", "明溪县", "将乐县", "大田县", "宁化县", "建宁县", "沙县", "尤溪县", "清流县", "泰宁县", "泉州市", "石狮市", "晋江市", "南安市", "惠安县", "永春县", "安溪县", "德化县", "金门县", "漳州市", "龙海市", "平和县", "南靖县", "诏安县", "漳浦县", "华安县", "东山县", "长泰县", "云霄县", "南平市", "建瓯市", "邵武市", "建阳市", "松溪县", "光泽县", "顺昌县", "浦城县", "政和县", "龙岩市", "漳平市", "长汀县", "武平县", "上杭县", "永定县", "连城县", "宁德市", "福安市", "福鼎市", "寿宁县", "霞浦县", "柘荣县", "屏南县", "古田县", "周宁县", "武夷山市", "江西省", "南昌市", "新建县", "南昌县", "进贤县", "安义县", "乐平市", "浮梁县", "萍乡市", "莲花县", "上栗县", "芦溪县", "九江市", "瑞昌市", "九江县", "星子县", "武宁县", "彭泽县", "永修县", "修水县", "湖口县", "德安县", "都昌县", "新余市", "分宜县", "鹰潭市", "贵溪市", "余江县", "赣州市", "瑞金市", "南康市", "石城县", "安远县", "赣县", "宁都县", "寻乌县", "兴国县", "定南县", "上犹县", "于都县", "龙南县", "崇义县", "信丰县", "全南县", "大余县", "会昌县", "吉安市", "吉安县", "永丰县", "永新县", "新干县", "泰和县", "峡江县", "遂川县", "安福县", "吉水县", "万安县", "宜春市", "丰城市", "樟树市", "高安市", "铜鼓县", "靖安县", "宜丰县", "奉新县", "万载县", "上高县", "抚州市", "南丰县", "乐安县", "金溪县", "南城县", "东乡县", "资溪县", "宜黄县", "广昌县", "黎川县", "崇仁县", "上饶市", "德兴市", "上饶县", "广丰县", "鄱阳县", "婺源县", "铅山县", "余干县", "横峰县", "弋阳县", "玉山县", "万年县", "井冈山市", "景德镇市", "山东省", "济南市", "章丘市", "平阴县", "济阳县", "商河县", "青岛市", "胶南市", "胶州市", "平度市", "莱西市", "即墨市", "淄博市", "桓台县", "高青县", "沂源县", "枣庄市", "滕州市", "垦利县", "广饶县", "利津县", "烟台市", "龙口市", "莱阳市", "莱州市", "招远市", "蓬莱市", "栖霞市", "海阳市", "长岛县", "潍坊市", "青州市", "诸城市", "寿光市", "安丘市", "高密市", "昌邑市", "昌乐县", "临朐县", "济宁市", "曲阜市", "兖州市", "邹城市", "鱼台县", "金乡县", "嘉祥县", "微山县", "汶上县", "泗水县", "梁山县", "泰安市", "新泰市", "肥城市", "宁阳县", "东平县", "威海市", "乳山市", "文登市", "荣成市", "日照市", "五莲县", "莒县", "莱芜市", "临沂市", "沂南县", "郯城县", "沂水县", "苍山县", "费县", "平邑县", "莒南县", "蒙阴县", "临沭县", "德州市", "乐陵市", "禹城市", "陵县", "宁津县", "齐河县", "武城县", "庆云县", "平原县", "夏津县", "临邑县", "聊城市", "临清市", "高唐县", "阳谷县", "茌平县", "莘县", "东阿县", "冠县", "滨州市", "邹平县", "沾化县", "惠民县", "博兴县", "阳信县", "无棣县", "菏泽市", "鄄城县", "单县", "郓城县", "曹县", "定陶县", "巨野县", "东明县", "成武县", "河南省", "郑州市", "巩义市", "新郑市", "新密市", "登封市", "荥阳市", "中牟县", "开封市", "开封县", "尉氏县", "兰考县", "杞县", "通许县", "洛阳市", "偃师市", "孟津县", "汝阳县", "伊川县", "洛宁县", "嵩县", "宜阳县", "新安县", "栾川县", "汝州市", "舞钢市", "宝丰县", "叶县", "郏", "县", "鲁山县", "安阳市", "林州市", "安阳县", "滑县", "内黄县", "汤阴县", "鹤壁市", "浚县", "淇", "县", "新乡市", "卫辉市", "辉县市", "新乡县", "获嘉县", "原阳县", "长垣县", "封丘县", "延津县", "焦作市", "沁阳市", "孟州市", "修武县", "温县", "武陟县", "博爱县", "濮阳市", "濮阳县", "南乐县", "台前县", "清丰县", "范县", "许昌市", "禹州市", "长葛市", "许昌县", "鄢陵县", "襄城县", "漯河市", "临颍县", "舞阳县", "义马市", "灵宝市", "渑池县", "卢氏县", "陕县", "南阳市", "邓州市", "桐柏县", "方城县", "淅川县", "镇平县", "唐河县", "南召县", "内乡县", "新野县", "社旗县", "西峡县", "商丘市", "永城市", "宁陵县", "虞城县", "民权县", "夏邑县", "柘城县", "睢县", "信阳市", "潢川县", "淮滨县", "息县", "新", "县", "商城县", "固始县", "罗山县", "光山县", "周口市", "项城市", "商水县", "淮阳县", "太康县", "鹿邑县", "西华县", "扶沟县", "沈丘县", "郸城县", "确山县", "新蔡县", "上蔡县", "西平县", "泌阳县", "平舆县", "汝南县", "遂平县", "正阳县", "济源市", "三门峡市", "平顶山市", "驻马店市", "湖北省", "武汉市", "黄石市", "大冶市", "阳新县", "十堰市", "郧县", "竹山县", "房县", "郧西县", "竹溪县", "荆州市", "洪湖市", "石首市", "松滋市", "监利县", "公安县", "江陵县", "宜昌市", "宜都市", "当阳市", "枝江市", "秭归县", "远安县", "兴山县", "襄樊市", "枣阳市", "宜城市", "南漳县", "谷城县", "保康县", "鄂州市", "荆门市", "钟祥市", "京山县", "沙洋县", "孝感市", "应城市", "安陆市", "汉川市", "云梦县", "大悟县", "孝昌县", "黄冈市", "麻城市", "武穴市", "红安县", "罗田县", "浠水县", "蕲春县", "黄梅县", "英山县", "团风县", "咸宁市", "赤壁市", "嘉鱼县", "通山县", "崇阳县", "通城县", "随州市", "广水市", "仙桃市", "天门市", "潜江市", "恩施市", "利川市", "建始县", "来凤县", "巴东县", "鹤峰县", "宣恩县", "咸丰县", "丹江口市", "老河口市", "神农架林区", "五峰土家族自治县", "长阳土家族自治县", "湖南省", "长沙市", "浏阳市", "长沙县", "望城县", "宁乡县", "株洲市", "醴陵市", "株洲县", "炎陵县", "茶陵县", "攸县", "湘潭市", "湘乡市", "韶山市", "湘潭县", "衡阳市", "耒阳市", "常宁市", "衡阳县", "衡东县", "衡山县", "衡南县", "祁东县", "邵阳市", "武冈市", "邵东县", "洞口县", "新邵县", "绥宁县", "新宁县", "邵阳县", "隆回县", "城步苗族自治县", "岳阳市", "临湘市", "汨罗市", "岳阳县", "湘阴县", "平江县", "华容县", "常德市", "津市市", "澧县", "临澧县", "桃源县", "汉寿县", "安乡县", "石门县", "慈利县", "桑植县", "益阳市", "沅江市", "桃江县", "南县", "安化县", "郴州市", "资兴市", "宜章县", "汝城县", "安仁县", "嘉禾县", "临武县", "桂东县", "永兴县", "桂阳县", "永州市", "祁阳县", "蓝山县", "宁远县", "新田县", "东安县", "江永县", "道县", "双牌县", "怀化市", "洪江市", "会同县", "沅陵县", "辰溪县", "溆浦县", "中方县", "娄底市", "涟源市", "新化县", "双峰县", "吉首市", "古丈县", "龙山县", "永顺县", "凤凰县", "泸溪县", "保靖县", "花垣县", "冷水江市", "张家界市", "江华瑶族自治县", "芷江侗族自治县", "新晃侗族自治县", "通道侗族自治县", "靖州苗族侗族自治县", "麻阳苗族自治县", "湘西土家族苗族自治州", "广东省", "广州市", "从化市", "增城市", "深圳市", "珠海市", "汕头市", "南澳县", "韶关市", "乐昌市", "南雄市", "仁化县", "始兴县", "翁源县", "新丰县", "佛山市", "江门市", "台山市", "开平市", "鹤山市", "恩平市", "湛江市", "廉江市", "雷州市", "吴川市", "遂溪县", "徐闻县", "茂名市", "高州市", "化州市", "信宜市", "电白县", "肇庆市", "高要市", "四会市", "广宁县", "德庆县", "封开县", "怀集县", "惠州市", "惠东县", "博罗县", "龙门县", "梅州市", "兴宁市", "梅县", "蕉岭县", "大埔县", "丰顺县", "五华县", "平远县", "汕尾市", "陆丰市", "海丰县", "陆河县", "河源市", "和平县", "龙川县", "紫金县", "连平县", "东源县", "阳江市", "阳春市", "阳西县", "阳东县", "清远市", "英德市", "连州市", "佛冈县", "阳山县", "清新县", "东莞市", "中山市", "潮州市", "潮安县", "饶平县", "揭阳市", "普宁市", "揭东县", "揭西县", "惠来县", "云浮市", "罗定市", "云安县", "新兴县", "郁南县", "乳源瑶族自治县", "连山壮族瑶族自治县", "连南瑶族自治县", "广西壮族自治区", "南宁市", "武鸣县", "隆安县", "马山县", "上林县", "宾阳县", "横县", "柳州市", "柳江县", "桂林市", "阳朔县", "临桂县", "灵川县", "全州县", "平乐县", "兴安县", "灌阳县", "荔浦县", "资源县", "永福县", "梧州市", "岑溪市", "苍梧县", "藤县", "蒙山县", "北海市", "合浦县", "东兴市", "上思县", "钦州市", "灵山县", "浦北县", "贵港市", "桂平市", "平南县", "玉林市", "北流市", "容县", "陆川县", "博白县", "兴业县", "百色市", "凌云县", "平果县", "西林县", "乐业县", "德保县", "田林县", "田阳县", "靖西县", "田东县", "那坡县", "贺州市", "钟山县", "昭平县", "河池市", "宜州市", "天峨县", "凤山县", "南丹县", "东兰县", "来宾市", "合山市", "象州县", "武宣县", "忻城县", "崇左市", "凭祥市", "宁明县", "扶绥县", "龙州县", "大新县", "天等县", "防城港市", "三江侗族自治县", "大化瑶族自治县", "巴马瑶族自治县", "龙胜各族自治县", "金秀瑶族自治县", "融水苗族自治县", "隆林各族自治县", "恭城瑶族自治县", "都安瑶族自治县", "富川瑶族自治县", "环江毛南族自治县", "罗城仫佬族自治县", "海南省", "海口市", "琼海市", "儋州市", "文昌市", "万宁市", "东方市", "澄迈县", "定安县", "屯昌县", "临高县", "三亚市", "五指山市", "白沙黎族自治县", "昌江黎族自治县", "乐东黎族自治县", "陵水黎族自治县", "保亭黎族苗族自治县", "琼中黎族苗族自治县", "重庆市", "渝中区", "江北区", "南岸区", "北碚区", "万盛区", "双桥区", "渝北区", "巴南区", "万州区", "涪陵区", "黔江区", "长寿区", "九龙坡区", "大渡口区", "沙坪坝区", "永川市", "合川市", "江津市", "南川市", "綦江县", "潼南县", "荣昌县", "璧山县", "大足县", "铜梁县", "梁平县", "城口县", "垫江县", "武隆县", "丰都县", "奉节县", "开县", "云阳县", "忠县", "巫溪县", "巫山县", "石柱土家族自治县", "秀山土家族苗族自治县", "酉阳土家族苗族自治县", "彭水苗族土家族自治县", "四川省", "成都市", "彭州市", "邛崃市", "崇州市", "金堂县", "郫县", "新津县", "双流县", "蒲江县", "大邑县", "自贡市", "荣县", "富顺县", "米易县", "盐边县", "泸州市", "泸县", "合江县", "叙永县", "古蔺县", "德阳市", "广汉市", "什邡市", "绵竹市", "罗江县", "中江县", "绵阳市", "江油市", "盐亭县", "三台县", "平武县", "安县", "梓潼县", "广元市", "青川县", "旺苍县", "剑阁县", "苍溪县", "遂宁市", "射洪县", "蓬溪县", "大英县", "内江市", "资中县", "隆昌县", "威远县", "乐山市", "夹江县", "井研县", "犍为县", "沐川县", "南充市", "阆中市", "营山县", "蓬安县", "仪陇县", "南部县", "西充县", "眉山市", "仁寿县", "彭山县", "洪雅县", "丹棱县", "青神县", "宜宾市", "宜宾县", "兴文县", "南溪县", "珙县", "长宁县", "高县", "江安县", "筠连县", "屏山县", "广安市", "华蓥市", "岳池县", "邻水县", "武胜县", "达州市", "万源市", "达县", "渠", "县", "宣汉县", "开江县", "大竹县", "雅安市", "芦山县", "石棉县", "名山县", "天全县", "荥经县", "宝兴县", "汉源县", "巴中市", "南江县", "平昌县", "通江县", "资阳市", "简阳市", "安岳县", "乐至县", "红原县", "汶川县", "阿坝县", "理县", "小金县", "黑水县", "金川县", "松潘县", "壤塘县", "茂县", "康定县", "丹巴县", "炉霍县", "九龙县", "甘孜县", "雅江县", "新龙县", "道孚县", "白玉县", "理塘县", "德格县", "乡城县", "石渠县", "稻城县", "色达县", "巴塘县", "泸定县", "得荣县", "西昌市", "美姑县", "昭觉县", "金阳县", "甘洛县", "布拖县", "雷波县", "普格县", "宁南县", "喜德县", "会东县", "越西县", "会理县", "盐源县", "德昌县", "冕宁县", "马尔康县", "九寨沟县", "峨眉山市", "都江堰市", "攀枝花市", "若尔盖县", "北川羌族自治县", "木里藏族自治县", "马边彝族自治县", "峨边彝族自治县", "甘孜藏族自治州", "凉山彝族自治州", "阿坝藏族羌族自治州", "贵州省", "贵阳市", "清镇市", "开阳县", "修文县", "息烽县", "水城县", "盘县", "遵义市", "赤水市", "仁怀市", "遵义县", "绥阳县", "桐梓县", "习水县", "凤冈县", "正安县", "余庆县", "湄潭县", "安顺市", "普定县", "德江县", "江口县", "思南县", "石阡县", "毕节市", "黔西县", "大方县", "织金县", "金沙县", "赫章县", "纳雍县", "兴义市", "望谟县", "兴仁县", "普安县", "册亨县", "晴隆县", "贞丰县", "安龙县", "凯里市", "施秉县", "从江县", "锦屏县", "镇远县", "麻江县", "台江县", "天柱县", "黄平县", "榕江县", "剑河县", "三穗县", "雷山县", "黎平县", "岑巩县", "丹寨县", "都匀市", "福泉市", "贵定县", "惠水县", "罗甸县", "瓮安县", "荔波县", "龙里县", "平塘县", "长顺县", "独山县", "六盘水市", "六枝特区", "万山特区", "三都水族自治县", "松桃苗族自治县", "玉屏侗族自治县", "沿河土家族自治县", "道真仡佬族苗族自治县", "务川仡佬族苗族自治县平坝县", "镇宁布依族苗族自治县", "紫云苗族布依族自治县", "关岭布依族苗族自治县铜仁市", "印江土家族苗族自治县", "黔东南苗族侗族自治州", "黔西南布依族苗族自治州", "威宁彝族回族苗族自治县", "黔南布依族苗族自治州", "云南省", "昆明市", "安宁市", "富民县", "嵩明县", "呈贡县", "晋宁县", "宜良县", "曲靖市", "宣威市", "陆良县", "会泽县", "富源县", "罗平县", "马龙县", "师宗县", "沾益县", "玉溪市", "华宁县", "澄江县", "易门县", "通海县", "江川县", "保山市", "施甸县", "昌宁县", "龙陵县", "腾冲县", "昭通市", "永善县", "绥江县", "镇雄县", "大关县", "盐津县", "巧家县", "彝良县", "威信县", "水富县", "鲁甸县", "丽江市", "华坪县", "永胜县", "思茅市", "临沧市", "镇康县", "凤庆县", "云县", "永德县", "文山县", "砚山县", "广南县", "马关县", "富宁县", "西畴县", "丘北县", "蒙自县", "个旧市", "开远市", "弥勒县", "红河县", "绿春县", "泸西县", "建水县", "元阳县", "石屏县", "景洪市", "勐海县", "楚雄市", "元谋县", "南华县", "牟定县", "武定县", "大姚县", "双柏县", "禄丰县", "永仁县", "姚安县", "大理市", "剑川县", "弥渡县", "云龙县", "洱源县", "鹤庆县", "祥云县", "宾川县", "永平县", "潞西市", "瑞丽市", "盈江县", "梁河县", "陇川县", "泸水县", "福贡县", "德钦县", "麻栗坡县", "香格里拉县", "宁蒗彝族自治县", "河口瑶族自治县", "玉龙纳西族自治县", "普洱哈尼族彝族自治县", "漾濞彝族自治县", "寻甸回族自治县", "墨江哈尼族自治县", "江城哈尼族彝族自治县", "峨山彝族自治县", "屏边苗族自治县", "澜沧拉祜族自治县", "兰坪白族普米族自治县", "石林彝族自治县", "西盟佤族自治县", "维西傈僳族自治县", "贡山独龙族怒族自治县", "景东彝族自治县", "沧源佤族自治县", "巍山彝族回族自治县", "景谷彝族傣族自治县", "南涧彝族自治县", "新平彝族傣族自治县", "禄劝彝族苗族自治县", "孟连傣族拉祜族佤族自治县", "金平苗族瑶族傣族自治县", "元江哈尼族彝族傣族自治县", "镇沅彝族哈尼族拉祜族自治县", "双江拉祜族佤族布朗族傣族自治县", "耿马傣族佤族自治县", "西藏自治区", "拉萨市", "林周县", "达孜县", "尼木县", "当雄县", "曲水县", "那曲县", "嘉黎县", "申扎县", "巴青县", "聂荣县", "尼玛县", "比如县", "索县", "班戈县", "安多县", "昌都县", "芒康县", "贡觉县", "八宿县", "左贡县", "边坝县", "洛隆县", "江达县", "丁青县", "察雅县", "乃东县", "琼结县", "措美县", "加查县", "贡嘎县", "洛扎县", "曲松县", "桑日县", "扎囊县", "错那县", "隆子县", "定结县", "萨迦县", "江孜县", "拉孜县", "定日县", "康马县", "吉隆县", "亚东县", "昂仁县", "岗巴县", "仲巴县", "萨嘎县", "仁布县", "白朗县", "噶尔县", "措勤县", "普兰县", "革吉县", "日土县", "札达县", "改则县", "林芝县", "墨脱县", "朗县", "米林县", "察隅县", "波密县", "日喀则市", "类乌齐县", "浪卡子县", "聂拉木县", "谢通门县", "南木林县", "工布江达县", "墨竹工卡县", "堆龙德庆县", "陕西省", "西安市", "高陵县", "蓝田县", "户县", "周至县", "铜川市", "宜君县", "宝鸡市", "岐山县", "凤翔县", "陇县", "太白县", "麟游县", "扶风县", "千阳县", "眉县", "凤", "县", "咸阳市", "礼泉县", "泾阳县", "永寿县", "三原县", "彬县", "旬邑县", "长武县", "乾县", "武功县", "淳化县", "渭南市", "韩城市", "华阴市", "蒲城县", "潼关县", "白水县", "澄城县", "华县", "合阳县", "富平县", "大荔县", "延安市", "安塞县", "洛川县", "子长县", "黄陵县", "延川县", "富县", "延长县", "甘泉县", "宜川县", "志丹县", "黄龙县", "吴旗县", "汉中市", "留坝县", "镇巴县", "城固县", "南郑县", "洋县", "宁强县", "佛坪县", "勉县", "西乡县", "略阳县", "榆林市", "清涧县", "绥德县", "神木县", "佳县", "府谷县", "子洲县", "靖边县", "横山县", "米脂县", "吴堡县", "定边县", "安康市", "紫阳县", "岚皋县", "旬阳县", "镇坪县", "平利县", "石泉县", "宁陕县", "白河县", "汉阴县", "商洛市", "镇安县", "山阳县", "洛南县", "商南县", "丹凤县", "柞水县", "甘肃省", "兰州市", "永登县", "榆中县", "皋兰县", "金昌市", "永昌县", "白银市", "靖远县", "景泰县", "会宁县", "天水市", "武山县", "甘谷县", "清水县", "秦安县", "武威市", "民勤县", "古浪县", "张掖市", "民乐县", "山丹县", "临泽县", "高台县", "平凉市", "灵台县", "静宁县", "崇信县", "华亭县", "泾川县", "庄浪县", "酒泉市", "玉门市", "敦煌市", "安西县", "金塔县", "庆阳市", "庆城县", "镇原县", "合水县", "华池县", "环县", "宁", "县", "正宁县", "定西市", "岷县", "渭源县", "陇西县", "通渭县", "漳县", "临洮县", "陇南市", "成县", "礼", "县康", "县", "文县", "两当县", "徽县", "宕昌县", "西和县", "临夏市", "临夏县", "康乐县", "永靖县", "广河县", "和政县", "合作市", "临潭县", "卓尼县", "舟曲县", "迭部县", "玛曲县", "碌曲县", "夏河县", "嘉峪关市", "东乡族自治县", "阿克塞哈萨克族自治县", "肃北蒙古族自治县", "张家川回族自治县", "天祝藏族自治县", "肃南裕固族自治县", "积石山保安族东乡族撒拉族自治县", "青海省", "西宁市", "湟源县", "湟中县", "平安县", "乐都县", "海晏县", "祁连县", "刚察县", "同仁县", "泽库县", "尖扎县", "共和县", "同德县", "贵德县", "兴海县", "贵南县", "玛沁县", "班玛县", "甘德县", "达日县", "久治县", "玛多县", "玉树县", "杂多县", "称多县", "治多县", "囊谦县", "乌兰县", "天峻县", "都兰县", "曲麻莱县", "德令哈市", "格尔木市", "门源回族自治县", "大通回族土族自治县", "河南蒙古族自治县", "化隆回族自治县", "互助土族自治县", "民和回族土族自治县", "循化撒拉族自治县", "宁夏回族自治区", "银川市", "灵武市", "永宁县", "贺兰县", "平罗县", "吴忠市", "同心县", "盐池县", "固原市", "西吉县", "隆德县", "泾源县", "彭阳县", "中卫市", "中宁县", "海原县", "石嘴山市", "青铜峡市", "新疆维吾尔自治区", "鄯善县", "哈密市", "伊吾县", "和田市", "和田县", "洛浦县", "民丰县", "皮山县", "策勒县", "于田县", "墨玉县", "温宿县", "沙雅县", "拜城县", "库车县", "柯坪县", "新和县", "乌什县", "喀什市", "巴楚县", "泽普县", "伽师县", "叶城县", "疏勒县", "莎车县", "疏附县", "乌恰县", "和静县", "尉犁县", "和硕县", "且末县", "博湖县", "轮台县", "若羌县", "昌吉市", "阜康市", "米泉市", "奇台县", "博乐市", "精河县", "温泉县", "伊宁市", "奎屯市", "伊宁县", "昭苏县", "新源县", "霍城县", "巩留县", "塔城市", "乌苏市", "额敏县", "裕民县", "沙湾县", "托里县", "青河县", "富蕴县", "福海县", "石河子市", "阿拉尔市", "五家渠市", "吐鲁番市", "托克逊县", "阿克苏市", "阿瓦提县", "岳普湖县", "麦盖提县", "英吉沙县", "阿图什市", "阿合奇县", "阿克陶县", "库尔勒市", "玛纳斯县", "呼图壁县", "特克斯县", "尼勒克县", "吉木乃县", "布尔津县", "哈巴河县", "阿勒泰市", "乌鲁木齐市", "乌鲁木齐县", "克拉玛依市", "图木舒克市", "吉木萨尔县", "巴里坤哈萨克自治县", "塔什库尔干塔吉克自治县", "焉耆回族自治县", "察布查尔锡伯自治县", "木垒哈萨克自治县", "和布克赛尔蒙古自治县", "香港", "中西区", "东区", "观塘区", "南区", "湾仔区", "离岛区", "葵青区", "北区", "西贡区", "沙田区", "屯门区", "大埔区", "荃湾区", "元朗区", "九龙城区", "油尖旺区", "深水埗区", "黄大仙区", "澳门特别行政区", "台湾省", "台北市", "高雄市", "基隆市", "台中市", "台南市", "新竹市", "嘉义市", "台北县", "板桥市", "宜兰县", "宜兰市", "新竹县", "竹北市", "桃园县", "桃园市", "苗栗县", "苗栗市", "台中县", "丰原市", "彰化县", "彰化市", "南投县", "南投市", "嘉义县", "太保市", "云林县", "斗六市", "台南县", "新营市", "高雄县", "凤山市", "屏东县", "屏东市", "台东县", "台东市", "花莲县", "花莲市", "澎湖县", "马公市" };

		#endregion

		/// <summary>
		/// 字典缓存。
		/// </summary>
		public const string DICTIONARY_CACHE_FILE = "../cache/dictionary.json";
		/// <summary>
		/// 样本缓存。
		/// </summary>
		public const string SAMPLE_CACHE_FILE = "../cache/samples.json";
		/// <summary>
		/// 中文标点符号集合。
		/// </summary>
		public static readonly char[] Dots = { '。', '？', '！', '，', '、', '；', '：' };

		/// <summary>
		/// 标准拼音列表。
		/// </summary>
		public static readonly HashSet<string> StandardPinyinList = new HashSet<string> { "a", "ai", "an", "ang", "ao", "ba", "bai", "ban", "bang", "bao", "bei", "ben", "beng", "bi", "bian", "biao", "bie", "bin", "bing", "bo", "bu", "ca", "cai", "can", "cang", "cao", "ce", "cen", "ceng", "cha", "chai", "chan", "chang", "chao", "che", "chen", "cheng", "chi", "chong", "chou", "chu", "chuai", "chuan", "chuang", "chui", "chun", "chuo", "ci", "cong", "cou", "cu", "cuan", "cui", "cun", "cuo", "da", "dai", "dan", "dang", "dao", "de", "dei", "den", "deng", "di", "dia", "dian", "diao", "die", "ding", "diu", "dong", "dou", "du", "duan", "dui", "dun", "duo", "e", "en", "er", "fa", "fan", "fang", "fei", "fen", "feng", "fo", "fou", "fu", "ga", "gai", "gan", "gang", "gao", "ge", "gei", "gen", "geng", "gong", "gou", "gu", "gua", "guai", "guan", "guang", "gui", "gun", "guo", "ha", "hai", "han", "hang", "hao", "he", "hei", "hen", "heng", "hong", "hou", "hu", "hua", "huai", "huan", "huang", "hui", "hun", "huo", "ji", "jia", "jian", "jiang", "jiao", "jie", "jin", "jing", "jiong", "jiu", "ju", "juan", "jue", "jun", "ka", "kai", "kan", "kang", "kao", "ke", "ken", "keng", "kong", "kou", "ku", "kua", "kuai", "kuan", "kuang", "kui", "kun", "kuo", "la", "lai", "lan", "lang", "lao", "le", "lei", "leng", "li", "lia", "lian", "liang", "liao", "lie", "lin", "ling", "liu", "long", "lou", "lu", "luan", "lue", "lun", "luo", "lv", "m", "ma", "mai", "man", "mang", "mao", "me", "mei", "men", "meng", "mi", "mian", "miao", "mie", "min", "ming", "miu", "mo", "mou", "mu", "na", "nai", "nan", "nang", "nao", "ne", "nei", "nen", "neng", "ng", "ni", "nian", "niang", "niao", "nie", "nin", "ning", "niu", "no", "nong", "nu", "nuan", "nue", "nuo", "nv", "o", "ou", "pa", "pai", "pan", "pang", "pao", "pei", "pen", "peng", "pi", "pian", "piao", "pie", "pin", "ping", "po", "pou", "pu", "qi", "qia", "qian", "qiang", "qiao", "qie", "qin", "qing", "qiong", "qiu", "qu", "quan", "que", "qun", "ran", "rang", "rao", "re", "ren", "reng", "ri", "rong", "rou", "ru", "ruan", "rui", "run", "ruo", "sa", "sai", "san", "sang", "sao", "se", "sen", "seng", "sha", "shai", "shan", "shang", "shao", "she", "shen", "sheng", "shi", "shou", "shu", "shua", "shuai", "shuan", "shuang", "shui", "shun", "shuo", "si", "song", "sou", "su", "suan", "sui", "sun", "suo", "ta", "tai", "tan", "tang", "tao", "te", "ten", "teng", "ti", "tian", "tiao", "tie", "ting", "tong", "tou", "tu", "tuan", "tui", "tun", "tuo", "wa", "wai", "wan", "wang", "wei", "wen", "weng", "wo", "wu", "xi", "xia", "xian", "xiang", "xiao", "xie", "xin", "xing", "xiong", "xiu", "xu", "xuan", "xue", "xun", "ya", "yan", "yang", "yao", "ye", "yi", "yin", "ying", "yo", "yong", "you", "yu", "yuan", "yue", "yun", "za", "zai", "zan", "zang", "zao", "ze", "zei", "zen", "zeng", "zha", "zhai", "zhan", "zhang", "zhao", "zhe", "zhen", "zheng", "zhi", "zhong", "zhou", "zhu", "zhua", "zhuai", "zhuan", "zhuang", "zhui", "zhun", "zhuo", "zi", "zong", "zou", "zu", "zuan", "zui", "zun", "zuo" };

		/// <summary>
		/// 拼音列表。
		/// </summary>
		public static List<string> PinyinList { get; } = new List<string>(StandardPinyinList);

		/// <summary>
		/// 记录了所有字及其拼音的集合。
		/// </summary>
		public static ConcurrentDictionary<string, CharacterInfo> Dictionary { get; private set; } = new ConcurrentDictionary<string, CharacterInfo>();

		/// <summary>
		/// 记录了所有繁体字及其简化字集合。
		/// </summary>
		public static ConcurrentDictionary<char, char> Simplified { get; } = new ConcurrentDictionary<char, char>();

		/// <summary>
		/// 最终生成的词典的词汇集合。
		/// </summary>
		public static ConcurrentDictionary<string, WordInfo> Lexicon { get; } = new ConcurrentDictionary<string, WordInfo>();

		/// <summary>
		/// 用于生成词典的词汇样本集合。
		/// </summary>
		public static ConcurrentDictionary<string, WordInfo> Samples { get; } = new ConcurrentDictionary<string, WordInfo>();

		/// <summary>
		/// 用于标记数据是否发生改变。
		/// </summary>
		public static bool IsDataReloaded { get; set; }

		/// <summary>
		/// 评估时的额外的加权。
		/// </summary>
		public const double EXTRA_EVALUATION = 5D;

		static App()
		{
		}

		/// <summary>
		/// 检查指定词汇是否包含生僻的读音。
		/// </summary>
		/// <param name="word">需要检查的词汇。</param>
		/// <param name="pinyin">该词汇的拼音。</param>
		/// <returns>如果该词汇中某个字符的读音与其一般读音不一致，则返回true。</returns>
		public static bool CheckRarePinyin(string word, string[] pinyin) => App.CheckRarePinyin(word, pinyin, 0, word.Length);

		/// <summary>
		/// 检查指定词汇是否包含生僻的读音。
		/// </summary>
		/// <param name="word">需要检查的词汇。</param>
		/// <param name="pinyin">该词汇的拼音。</param>
		/// <param name="offset">指定一个开始检测的偏移量。</param>
		/// <param name="count">需要比较的次数。</param>
		/// <returns>如果该词汇中某个字符的读音与其一般读音不一致，则返回true。</returns>
		public static bool CheckRarePinyin(string word, string[] pinyin, int offset, int count)
		{
			if (pinyin == null)
			{
				return false;
			}

			count += offset;
			for (int i = offset; i < count; i++)
			{
				if (!App.Dictionary.TryGetValue(new string(word[i], 1), out CharacterInfo ch) || ch == null)
				{
					return false;
				}
				if (pinyin[i] != ch.PreferedPinyin)
				{
					return true;
				}
			}

			return false;
		}

		/// <summary>
		/// 保存词汇的原始样本。
		/// </summary>
		/// <returns>需要保存的样本。</returns>
		public static void SaveSamples()
		{
			Console.WriteLine("保存词汇样本。");

			File.WriteAllText(SAMPLE_CACHE_FILE, JsonConvert.SerializeObject(App.Samples.Values));

			Console.WriteLine("完成。");
		}

		/// <summary>
		/// 加载词汇的原始样本。
		/// </summary>
		public static async Task LoadSamplesAsync()
		{
			Console.Write("加载词汇样本...");
			await App.WaitAsync(Task.Run(delegate
			{
				WordInfo[] array = JsonConvert.DeserializeObject<WordInfo[]>(File.ReadAllText(SAMPLE_CACHE_FILE));
				App.Samples.Clear();
				foreach (WordInfo word in array)
				{
					App.Samples.TryAdd(word.Word, word);
				}
			}));
			Console.WriteLine("完成。");
			Console.WriteLine($"共加载{ App.Samples.Count}个词汇样本。");
		}

		/// <summary>
		/// 保存字典相关的文件。
		/// </summary>
		public static async Task LoadDictionaryAsync()
		{
			Console.Write("加载字典数据...");
			await App.WaitAsync(Task.Run(delegate
			{
				App.Dictionary = JsonConvert.DeserializeObject<ConcurrentDictionary<string, CharacterInfo>>(File.ReadAllText(DICTIONARY_CACHE_FILE));

				if (File.Exists("pinyin.txt"))
				{
					string[] lines = File.ReadAllLines("pinyin.txt");
					foreach (string pinyin in lines)
					{
						if (!string.IsNullOrEmpty(pinyin))
						{
							App.EnsurePinyin(pinyin);
						}
					}
				}

				foreach (KeyValuePair<string, CharacterInfo> item in App.Dictionary)
				{
					char ch = item.Key[0];
					CharacterInfo info = item.Value;
					info.Character = item.Key;
					if (info.Simplified > 0)
					{
						App.Simplified[ch] = info.Simplified;
					}

					if (info.Traditional > 0)
					{
						App.Simplified[info.Traditional] = ch;
					}
				}
			}));

			Console.WriteLine("完成。");
			Console.WriteLine($"共加载{ App.Dictionary.Count}个字符。");
		}

		/// <summary>
		/// 以异步的方式从控制台读取一个按键信息。
		/// </summary>
		/// <param name="timeout">额外指定一个以秒为单位的超时时间。</param>
		/// <returns>若用户在计时结束之前输入对应按键，则返回该安静信息，否则返回默认值。</returns>
		public static async Task<ConsoleKeyInfo> ReadKeyAsync(int timeout = 5)
		{
			int top = Console.CursorTop;
			int left = Console.CursorLeft;
			string format = new string('0', timeout.ToString().Length);
			while (timeout > -1)
			{
				if (Console.KeyAvailable)
				{
					return Console.ReadKey();
				}

				Console.SetCursorPosition(left, top);
				Console.Write($"[{timeout.ToString(format)}]");
				if (timeout == 0)
				{
					break;
				}
				await Task.Delay(1000);
				timeout--;
			}
			return new ConsoleKeyInfo('\0', default(ConsoleKey), false, false, false);
		}

		/// <summary>
		/// 以异步的方式从控制台读取用户输入的一行信息。
		/// </summary>
		/// <param name="timeout">额外指定一个以秒为单位的超时时间。</param>
		/// <returns>若用户在计时结束之前开始输入，则停止计时并返回用户输入的信息，否则返回null。</returns>
		public static async Task<string> ReadLineAsync(int timeout = 5)
		{
			int top = Console.CursorTop;
			int left = Console.CursorLeft;
			string format = new string('0', timeout.ToString().Length);
			while (timeout > -1)
			{
				if (Console.KeyAvailable)
				{
					return Console.ReadLine();
				}

				Console.SetCursorPosition(left, top);
				Console.Write($"[{timeout.ToString(format)}]");
				if (timeout == 0)
				{
					break;
				}
				await Task.Delay(1000);
				timeout--;
			}
			return null;
		}

		/// <summary>
		/// 以并发方式异步执行指定的动作。
		/// </summary>
		/// <param name="action">需要执行的动作。</param>
		/// <returns>任务信息。</returns>
		public static async Task ParallelAsync(Func<Task> action)
		{
			Task[] tasks = new Task[Program.CONCURRENCY_LEVEL];
			for (int i = 0; i < tasks.Length; i++)
			{
				tasks[i] = Task.Run(action);
			}

			await Task.WhenAll(tasks);
		}

		/// <summary>
		/// 遍历指定集合中的每一个参数，并且以这个参数异步执行指定的动作。
		/// </summary>
		/// <param name="arguments">执行动作需要的参数集合。</param>
		/// <param name="handler">需要执行的动作。</param>
		/// <returns>任务信息。</returns>
		public static async Task ForEachAsync<TArg>(IEnumerable<TArg> arguments, Func<TArg, Task> handler)
		{
			ConcurrentQueue<TArg> queue = new ConcurrentQueue<TArg>(arguments);
			Progress progress = new Progress(queue.Count);

			Task[] tasks = new Task[Program.CONCURRENCY_LEVEL];
			for (int i = 0; i < tasks.Length; i++)
			{
				tasks[i] = Task.Run(async delegate
				{
					while (queue.TryDequeue(out TArg arg))
					{
						await handler(arg);
						progress.Increment();
					}
				});
			}

			await Task.WhenAll(tasks);
		}

		/// <summary>
		/// 以异步方式等待指定任务完成，并且在等待过程中显示等待动画。
		/// </summary>
		/// <param name="handler">需要执行的程序。</param>
		/// <returns>任务信息。</returns>
		public static async Task WaitAsync(Task task)
		{
			Console.CursorVisible = false;
			CancellationTokenSource cancellation = new CancellationTokenSource();
			Task standby = Task.Run(async delegate
			{
				int y = Console.CursorTop;
				int x = Console.CursorLeft;

				int y2 = y;
				int x2 = x;
				int delay = 1000;
				int count = 0;
				while (true)
				{
					await Task.Delay(delay);
					if (count++ > 10)
					{
						if (delay < 10000)
						{
							delay += 1000;
						}

						count = 0;
					}
					if (cancellation.IsCancellationRequested)
					{
						Console.CursorVisible = true;
						return;
					}

					if (Console.CursorLeft != x2 || Console.CursorTop != y2)
					{
						Console.SetCursorPosition(x2, y2);
					}

					if (x2 + 1 >= Console.WindowWidth)
					{
						Console.SetCursorPosition(x, y);
						Console.Write(new string(' ', x2 - x));
						Console.SetCursorPosition(x, y);
					}

					Console.Write(".");
					Console.CursorVisible = false;
					y2 = Console.CursorTop;
					x2 = Console.CursorLeft;
				}
			});
			await task;
			cancellation.Cancel();
			await standby;
		}

		/// <summary>
		/// 遍历指定集合中的每一个参数，并且以这个参数异步执行指定的动作。
		/// </summary>
		/// <param name="arguments">执行动作需要的参数集合。</param>
		/// <param name="handler">需要执行的动作。</param>
		/// <returns>任务信息。</returns>
		public static async Task ForEachAsync<TArg>(IEnumerable<TArg> arguments, Action<TArg> handler)
		{
			ConcurrentQueue<TArg> queue = new ConcurrentQueue<TArg>(arguments);

			Task[] tasks = new Task[Program.CONCURRENCY_LEVEL];
			for (int i = 0; i < tasks.Length; i++)
			{
				tasks[i] = Task.Run(delegate
			   {
				   while (queue.TryDequeue(out TArg arg))
				   {
					   handler(arg);
				   }
			   });
			}

			await Task.WhenAll(tasks);
		}

		/// <summary>
		/// 检查指定的词汇是否包含多音字。
		/// </summary>
		/// <param name="word">需要检测的词汇。</param>
		/// <returns>如果至少包含一个多音字，则返回true。</returns>
		public static bool ContainsPolyphones(string word)
		{
			if (String.IsNullOrEmpty(word))
			{
				return false;
			}

			foreach (char ch in word)
			{
				if (!App.Dictionary.TryGetValue(new string(ch, 1), out CharacterInfo info) || info == null)
				{
					return false;
				}

				if (info.Count > 1)
				{
					return true;
				}
			}

			return false;
		}

		/// <summary>
		/// 修正拼音字符串，使之标准化。
		/// </summary>
		/// <param name="pinyin">待处理字符串。</param>
		/// <param name="forWord">指示是否是一组拼音。</param>
		/// <returns>处理后的字符串。</returns>
		public static string FixPinyin(string pinyin, bool forWord = false)
		{
			if (String.IsNullOrEmpty(pinyin))
			{
				return null;
			}
			pinyin = pinyin.Trim();
			char[] chars = pinyin.ToCharArray();
			int length = chars.Length;
			int tone = chars[length - 1] - '1';
			if (tone > -1 && tone < 5)
			{
				length--;
			}

			for (int i = 0; i < chars.Length; i++)
			{
				char ch = chars[i];

				//大写转小写
				if (ch >= 'A' && ch <= 'Z')
				{
					chars[i] = ch = (char)('a' + ch - 'A');
				}

				//全角转半角
				if (ch >= 'ａ' && ch <= 'ｚ')
				{
					chars[i] = ch = (char)('a' + ch - 'ａ');
				}
				if (ch >= 'Ａ' && ch <= 'Ｚ')
				{
					chars[i] = ch = (char)('a' + ch - 'Ａ');
				}

				switch (ch)
				{
					case 'a':
					case 'ā':
					case 'á':
					case 'ă':
					case 'ǎ':
					case 'à':
					case 'ɑ':
						chars[i] = 'a';
						break;
					case 'o':
					case 'ō':
					case 'ó':
					case 'ŏ':
					case 'ǒ':
					case 'ò':
						chars[i] = 'o';
						break;
					case 'e':
					case 'ē':
					case 'é':
					case 'ĕ':
					case 'ě':
					case 'è':
						chars[i] = 'e';
						break;
					case 'i':
					case 'ī':
					case 'í':
					case 'ĭ':
					case 'ǐ':
					case 'ì':
						chars[i] = 'i';
						break;
					case 'u':
					case 'ū':
					case 'ú':
					case 'ŭ':
					case 'ǔ':
					case 'ù':
						chars[i] = 'u';
						break;
					case 'v':
					case 'ü':
					case 'ǖ':
					case 'ǘ':
					case 'ǚ':
					case 'ǜ':
						if (i + 1 < length)
						{
							switch (chars[i + 1])
							{
								case 'n':
								case 'e':
								case 'ē':
								case 'é':
								case 'ĕ':
								case 'ě':
								case 'è':
								case ' ':
								case '	':
									chars[i] = 'u';
									break;
								default:
									chars[i] = 'v';
									break;
							}
						}
						else
						{
							chars[i] = 'v';
						}
						break;
					case 'ń':
					case 'ň':
					case 'ǹ':
						chars[i] = 'n';
						break;
					case 'ḿ':
					case '':
						chars[i] = 'm';
						break;
					case 'ɡ':
						chars[i] = 'g';
						break;
					case ' ':
					case '	':
						chars[i] = ' ';
						break;

				}

				if (chars[i] < 'a' || chars[i] > 'z')
				{
					chars[i] = ' ';
				}
			}

			if (forWord)
			{
				return Regex.Replace(new string(chars, 0, length), @"\s{2,}", " ").Trim();
			}
			return Regex.Replace(new string(chars, 0, length), @"\s+", String.Empty);
		}

		/// <summary>
		/// 为指定的词汇的拼音字符串解析为数组。
		/// </summary>
		/// <param name="word">目标词汇。</param>
		/// <param name="pinyin">拼音字符串。</param>
		/// <returns>解析后的拼音字符串数组。</returns>
		public static string ParseWordPinyin(string word, string pinyin)
		{
			if (pinyin == null)
			{
				return null;
			}
			pinyin = WebUtility.HtmlDecode(pinyin).Trim();
			if (pinyin.Length == 0)
			{
				return null;
			}
			Match match = Regex.Match(pinyin, @"[,，]");
			if (match.Success)
			{
				pinyin = pinyin.Substring(0, match.Index);
			}

			pinyin = App.FixPinyin(pinyin, true);

			if (String.IsNullOrEmpty(pinyin))
			{
				return null;
			}

			string[] array = Regex.Split(pinyin, @"\s+", RegexOptions.Compiled | RegexOptions.IgnoreCase);

			if (array.Length != word.Length)
			{
				if (array.Length < word.Length)
				{
					#region 如果现有拼音不正确，则尝试进行修复
					List<string> list = new List<string>(word.Length);
					for (int w = 0, p = 0; w < word.Length && p < array.Length; w++)
					{
						pinyin = array[p];
						if (App.PinyinList.Contains(pinyin))
						{
							list.Add(pinyin);
							p++;
							continue;
						}

						if (!App.Dictionary.TryGetValue(word[w].ToString(), out CharacterInfo info))
						{
							break;
						}

						/**
						 * 如果当前位置的拼音恰好是几个相邻，尝试逐个剥离。
						 */
						bool succ = false;
						for (int i = 0; i < info.Count; i++)
						{
							/**
							 * 这个位置的拼音恰好以某个字符的完整拼音，开始，可以直接处理。
							 */
							string item = info[i];
							if (pinyin.StartsWith(item))
							{
								list.Add(item);
								pinyin = pinyin.Substring(item.Length);
								if (pinyin.Length == 0)
								{
									p++;
								}
								else
								{
									array[p] = pinyin;
								}

								succ = true;
								break;
							}
						}

						if (!succ)
						{
							break;
						}
					}

					if (list.Count == word.Length)
					{
						return String.Join(" ", list);
					}
					#endregion
				}

				return null;
			}

			for (int i = 0; i < array.Length; i++)
			{
				string item = array[i];
				if (!App.PinyinList.Contains(item))
				{
					if (App.Dictionary.TryGetValue(new string(word[i], 1), out CharacterInfo ch) && ch.Count == 1)
					{
						array[i] = ch.PreferedPinyin;
						continue;
					}
					return null;
				}
			}

			return String.Join(" ", array);
		}

		/// <summary>
		/// 确保指定的拼音位于拼音列表。
		/// </summary>
		/// <param name="pinyin">拼音字符串。</param>
		public static void EnsurePinyin(string pinyin)
		{
			if (string.IsNullOrEmpty(pinyin))
			{
				return;
			}
			List<string> list = App.PinyinList;
			lock (list)
			{
				if (!list.Contains(pinyin))
				{
					//if ("kouwang fenglin quanme shime".Contains(pinyin))
					//{
					//	pinyin = pinyin;
					//}
					list.Add(pinyin);
				}
			}
		}

		/// <summary>
		/// 从指定的url下载文档。
		/// </summary>
		/// <param name="url">文档地址。</param>
		/// <param name="validate">是否要验证缓存。</param>
		/// <returns>若缓存文件存在，返回缓存文件，否则从指定地址下载最新的内容并缓存。</returns>
		public static async Task<string> DownloadAsync(DownloadSettings settings)
		{
			string url = settings.Url;
			Match match = Regex.Match(url, @"\w+://([^\/?]+)");
			string path;
			string data = settings.Data;
			using (MD5 md5 = MD5.Create())
			{
				int index = url.LastIndexOf('/');

				string key = url.Substring(index);
				if (data != null)
				{
					key = key + "#" + data;
				}
				string id = new Guid(md5.ComputeHash(Encoding.UTF8.GetBytes(key))).ToString("N");
				string file = $"{id}.html";

				string host = match.Groups[1].Value.ToLower();
				string dir;

				if (match.Length >= index)
				{
					dir = $"{host}/{(id.GetHashCode() & 0xFF):000}";
				}
				else
				{
					dir = $"{host}/{url.Substring(match.Length, index - match.Length).Replace('/', ' ').Trim()}/{(id.GetHashCode() & 0xFF):000}";
				}

				path = $"../cache/{dir}";
				if (!Directory.Exists(dir))
				{
					Directory.CreateDirectory(path);
				}
				path = $"../cache/{dir}/{file}";
			}

			int times = 0;
			if (File.Exists(path))
			{
				DateTime lastWriteDate = File.GetLastWriteTime(path).Date;
				if (settings.IgnoreCache.HasValue)
				{
					if (lastWriteDate >= settings.IgnoreCache.Value)
					{
						return null;
					}
				}
				else
				{
					if (lastWriteDate >= (settings.CacheDate ?? DateTime.Today.AddMonths(-6)))
					{
						while (times < 10)
						{
							try
							{
								return File.ReadAllText(path);
							}
							catch
							{
								await Task.Delay(100);
								times++;
							}
						}
					}
				}
			}

			times = 0;

			RESTART:
			HttpWebResponse response;
			try
			{
				HttpWebRequest request = WebRequest.CreateHttp(url);
				request.Referer = url;
				request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36";
				request.Method = "GET";
				request.ContentType = settings.ContentType ?? "text/html; charset=utf-8";
				if (settings.Authorization != null)
				{
					request.Headers.Add("Authorization", settings.Authorization);
				}

				if (data != null)
				{
					if (settings.ContentType == null)
					{
						if (data[0] == '[' && data[data.Length - 1] == ']' || data[0] == '{' && data[data.Length - 1] == '}')
						{
							request.ContentType = "application/json;charset=UTF-8";
						}
						else
						{
							request.ContentType = "application/x-www-form-urlencoded";
						}
					}
					request.Method = "POST";
					byte[] buffer = Encoding.UTF8.GetBytes(data);
					request.ContentLength = buffer.Length;
					using (Stream stream = await request.GetRequestStreamAsync())
					{
						await stream.WriteAsync(buffer, 0, buffer.Length);
					}
				}

				response = await request.GetResponseAsync() as HttpWebResponse;

				if (response.StatusCode == HttpStatusCode.OK)
				{
					if (response.ContentLength == 0)
					{
						return String.Empty;
					}
					string encoding = response.ContentEncoding;
					if (String.IsNullOrEmpty(encoding))
					{
						match = Regex.Match(response.ContentType, @"charset\s*=\s*([^\s,;]+)", RegexOptions.IgnoreCase | RegexOptions.Compiled);
						if (match.Success)
						{
							encoding = match.Groups[1].Value;
						}
					}

					if (String.IsNullOrEmpty(encoding))
					{
						encoding = "utf-8";
					}

					using (StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(encoding)))
					{
						string content = await sr.ReadToEndAsync();
						File.WriteAllText(path, content);
						return content;
					}
				}
			}
			catch (WebException e)
			{
				response = e.Response as HttpWebResponse;
				if (response != null)
				{
					switch (response.StatusCode)
					{
						case HttpStatusCode.NotFound:
							return null;
						case HttpStatusCode.InternalServerError:
						case HttpStatusCode.Forbidden:
							await Task.Delay(10000);
							if (times++ < 10)
							{
								await Task.Delay(500);
								goto RESTART;
							}

							break;
					}
				}
				else
				{
					if (times++ < 10)
					{
						await Task.Delay(500);
						goto RESTART;
					}
				}
			}
			catch
			{
				if (times++ < 10)
				{
					await Task.Delay(500);
					goto RESTART;
				}

			}
			return null;
		}
	}
}